32

以前に文字列を検索char*hexましたが、見つかった実装では、文字列の末尾に存在しないガベージが追加されていhexます。ソケットからパケットを受信しました。それらをhexログ用の文字列 (null 終端バッファ) に変換する必要があります。誰かが私に良い実装をアドバイスできますかC++?

ありがとう!

4

8 に答える 8

19

ここに何かがあります:

char const hex_chars[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

for( int i = data; i < data_length; ++i )
{
    char const byte = data[i];

    string += hex_chars[ ( byte & 0xF0 ) >> 4 ];
    string += hex_chars[ ( byte & 0x0F ) >> 0 ];
}
于 2012-05-23T15:44:21.017 に答える
10

最も簡単な:

int main()
{
    const char* str = "hello";
    for (const char* p = str; *p; ++p)
    {
        printf("%02x", *p);
    }
    printf("\n");
    return 0;
}
于 2012-05-23T16:06:27.603 に答える
7

上記のコード スニペットでは、文字列のバイト オーダーが正しくないため、少し修正しました。

char const hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',   'B','C','D','E','F'};

std::string byte_2_str(char* bytes, int size) {
  std::string str;
  for (int i = 0; i < size; ++i) {
    const char ch = bytes[i];
    str.append(&hex[(ch  & 0xF0) >> 4], 1);
    str.append(&hex[ch & 0xF], 1);
  }
  return str;
}
于 2012-06-19T20:16:21.717 に答える
-3

std::hexを使用できます

例えば。

std::cout << std::hex << packet;
于 2012-05-23T15:57:33.137 に答える