将无符号字符数组打印为十六进制
Print unsigned char array to hex
问题
我有一些字节缓冲区,在运行时会被填满。我想使用十六进制代码显示缓冲区的内容。这就是缓冲区的定义:
enum { max_data_length = 8192 }; //8KB
unsigned char stream_data_[max_data_length];
现在我想打印内容。例如,数据存储如下:
stream_data_[0] = 124;
stream_data_[1] = 198;
stream_data_[2] = 60;
现在我想打印这个缓冲区的内容(十六进制)。我尝试了几个堆栈溢出帖子,但它们都使用了无符号int或填充数组。我真的被这个问题卡住了!
代码
我举了个例子:
enum { max_data_length = 3 }; //8KB
unsigned char stream_data_[max_data_length];
stream_data_[0] = 20;
stream_data_[1] = 30;
stream_data_[2] = 40;
char str[16];
sprintf(str, "%X02 ", stream_data_);
std::cout << str;
但我不明白为什么每次运行的结果总是不一样。例如:
C2CA426002
7C92553002
唯一的问题是iostream将unsigned char
视为字符类型,而不是作为一个小整数。要解决这个问题,只需在输出之前将unsigned
char
强制转换为unsigned
即可指定十六进制输出,当然可能还有宽度和填充字符。)
转储unsigned char
:数组
void
dumpArray( unsigned char const* array, int count, std::ostream& dest )
{
dest.setf( std::ios_base::hex, std::ios_base::basefield );
dest.fill( '0' );
while ( count > 0 ) {
dest << std::setw( 2 ) << static_cast<unsigned>( *array );
-- count;
if ( count != 0 ) {
dest << ' ';
}
}
}
(当然,在生产代码中,您需要保存以前的格式,并在返回之前将其恢复。)
相关文章:
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 打印十六进制字符
- 编译器始终打印十六进制/八进制数字
- 在 c++ 中以十六进制格式打印无符号字符(BYTE).使用 std::cout
- 以十六进制打印出 DWORD 会在 win32 c++ 中返回0x7FFFFFFF
- 将长整型值打印为带有前导零的十六进制
- C++ 在地板函数之后以十六进制打印数字
- 如何使系统在十六进制数之前打印 0x,在八进制数之前打印 0?
- 打印出浮点数的内部十六进制
- 为什么 std::hex 没有特别用字符打印为十六进制?
- 我如何在GDB中打印十六进制的双重位
- C/C++ 以十六进制打印字节,得到奇怪的十六进制值
- 尝试将二进制数组转换为十六进制C++然后打印结果
- 如何从uint32_t打印十六进制
- 用IO操纵器在十六进制中打印一个8位号码
- 将内存地址中的值打印为十六进制C++
- fprintf:打印文字十六进制字符串
- 将十六进制转换为可打印的字符串/字符
- 以十六进制打印数据结构值