将字符串中的二进制数据转换为char

Converting binary data in string to char

本文关键字:转换 char 数据 二进制 字符串      更新时间:2023-10-16

所以我有一些数据从数据包转换为字符串,二进制(数据报):

std::string Packet::packetToString()
{
    //packing to one bitset
    std::bitset<208> pak(std::string(std::bitset<2>(type).to_string() + std::bitset<64>(num1).to_string() + std::bitset<64>(num2).to_string() + std::bitset<64>(num3).to_string() + std::bitset<4>(state).to_string() + std::bitset<4>(id).to_string() + "000000")); 
    std::string temp;
    std::bitset<8> tempBitset(0);
    for (int i = pak.size() - 1; i >= 0; i--)
    {   
        tempBitset[i % 8] = pak[i];
        if (i % 8 == 0)
        {
            char t = static_cast<char> (tempBitset.to_ulong());
            temp.push_back(t);
        }
    }
    return temp;
}

然后,我想将此字符串转换为char阵列(在这种情况下为char buffer[26];),并使用SendTo("127.0.0.1", 1111, buffer, 26);

发送它

问题是什么:

Packet pak1(... data I input ... );
string packet;
packet = pak1.packetToString();
char buffer[26];
strcpy_s(buffer, packet.c_str());

在出现0x00(NULL)的情况下,使用此数组发送的数据似乎将被删除。我想这是由C_STR()引起的。我该如何处理?:)

strcpy()strcpy_s()复制null终止的c串。因此,确实,如果c_str()中有任何0x00 char,则副本将结束。

不管您可能遇到的任何0x00,都使用std::copy()复制完整数据:

copy (packet.begin(), packet.end(), buffer);   // hoping packet.size()<26

或使用copy_n()

copy_n (packet.begin(), 26, buffer);   // assuming that packet is at least 26 bytes