2017-11-27 10 views
1

So zu char habe ich einige Daten, die ich aus Paket umwandeln in binären (Datagramm) zu bespannen,:Konvertieren von Binärdaten in string

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; 
} 

Dann möchte ich diese Zeichenfolge konvertieren Array auf char (in diesem Fall char buffer[26];) und SendTo("127.0.0.1", 1111, buffer, 26);

es mit schicken Was ist das Problem:

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

Daten mit diesem Array senden scheint bei 0x00(NULL) gelöscht werden erscheint. Dies wird durch c_str() verursacht, denke ich. Wie kann ich damit umgehen? :)

Antwort

0

strcpy() und strcpy_s() copy Null abgeschlossen C-Strings. In der Tat, wenn es 0x00 Char in der c_str() gibt, wird die Kopie enden.

Verwenden std::copy() die vollständigen Daten zu kopieren, unabhängig von der jeder 0x00, die auftreten könnten:

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

oder mit copy_n():

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