You need to enable JavaScript to run this app. C++中字节数组元素如何以十六进制数值形式打印(Windows 10 64位环境)
优惠活动
大模型
产品
解决方案
定价
更多

C++中字节数组元素如何以十六进制数值形式打印(Windows 10 64位环境)

实现十六进制字节数值输出的方法

问题本质

C++标准库的输出流对char、unsigned char类型做了专门的输出重载,不管是否提前设置std::hex格式,只要传入的是char类类型的变量,都会优先按照对应ASCII字符输出内容。0x43对应的ASCII字符就是'C',因此程序运行时不会输出十六进制数值形式的43。

可落地的实现方案

  • 触发数值输出重载:将unsigned char强转为int类型后再输出,这是跨平台兼容的通用写法,在64位Windows 10环境下可以直接正常运行
    替换原有输出行的代码为:
    std::cout << std::hex << static_cast<int>(bytes[0]) << std::endl;
    
    如果需要输出大写字母的十六进制值(比如0x0F输出为0F而非0f),可以在输出前加上std::uppercase格式控制。
  • 补全两位十六进制宽度:处理字节流时经常需要给不足两位的十六进制值补前导零(比如0x0F不能只输出f,要输出0f),可以借助已经引入的<iomanip>头文件里的工具函数实现,示例:
    // 遍历输出数组中所有字节的格式化十六进制值
    for (unsigned char b : bytes) {
        std::cout << std::hex << std::setw(2) << std::setfill('0')
                  << static_cast<int>(b) << " ";
    }
    // 实际输出效果:43 4d 30 30 0f 0d 
    

常见踩坑提醒

  • std::hex是流的持久化格式状态,设置一次后,后续所有数值输出都会沿用十六进制规则,如果后续程序需要输出十进制数值,记得用std::dec切回十进制格式。
  • 不要使用转成void*指针的方式输出字节值,这种写法会输出指针地址的十六进制编码,和字节本身的数值没有关系,得不到正确结果。

内容的提问来源于stack exchange,提问作者Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 12:06:03