Jor*_*nzo 26
假设数据是char*.使用std :: hex的工作示例:
for(int i=0; i<data_length; ++i)
std::cout << std::hex << (int)data[i];
Run Code Online (Sandbox Code Playgroud)
或者如果你想把它全部保存在一个字符串中:
std::stringstream ss;
for(int i=0; i<data_length; ++i)
ss << std::hex << (int)data[i];
std::string mystr = ss.str();
Run Code Online (Sandbox Code Playgroud)
K-b*_*llo 11
这是一些东西:
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 ];
}
Run Code Online (Sandbox Code Playgroud)
最简单的:
int main()
{
const char* str = "hello";
for (const char* p = str; *p; ++p)
{
printf("%02x", *p);
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在这里找到了很好的例子Display-char-as-Hexadecimal-String-in-C++:
std::vector<char> randomBytes(n);
file.read(&randomBytes[0], n);
// Displaying bytes: method 1
// --------------------------
for (auto& el : randomBytes)
std::cout << std::setfill('0') << std::setw(2) << std::hex << (0xff & (unsigned int)el);
std::cout << '\n';
// Displaying bytes: method 2
// --------------------------
for (auto& el : randomBytes)
printf("%02hhx", el);
std::cout << '\n';
return 0;
Run Code Online (Sandbox Code Playgroud)
如上所示的方法1可能是更多的C++方式:
Cast to an unsigned int
用于std::hex将值表示为十六进制数字
使用std::setwandstd::setfillfrom<iomanip>to format
请注意,您需要屏蔽 cast int0xff以显示最低有效字节:
(0xff & (unsigned int)el)。否则,如果设置了最高位,则转换将导致三个最高有效字节设置为
ff。
上面的代码段在字符串中提供了错误的字节顺序,因此我对其进行了一些修复。
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;
}
Run Code Online (Sandbox Code Playgroud)
使用升压:
#include <boost/algorithm/hex.hpp>
std::string s("tralalalala");
std::string result;
result.reserve(s.size() * 2);
boost::algorithm::hex_lower(s, std::back_inserter(result));
Run Code Online (Sandbox Code Playgroud)
https://godbolt.org/z/jEc1vPW38
| 归档时间: |
|
| 查看次数: |
95474 次 |
| 最近记录: |