c - C 打印中的十六进制宽度不能正常工作?
问题描述
我正在打印出三个字节的数组,如下所示:
cmd_buf
作为一个传递const char *
for (ii = 0; ii<=2; ii++) {
printf("byte[%0d] = %02x\n", ii, cmd_buf[ii]);
}
但我看到了这个:
# BUFFER IS b4a602
# byte[0] = ffffffb4
# byte[1] = ffffffa6
# byte[2] = 02
如果我这样做,它可以正常工作:
printf("byte[%0d] = %02x\n", ii, (unsigned char) cmd_buf[ii]);
不%02x
应该只打印两个字符吗?为什么它表现得像这是一个有符号的值?
解决方案
%x 是 int - 它隐式地将您的签名字符转换为 4 字节以匹配。使用 %hx 缩写和 %hhx 字符。在您的情况下,您可能打算使用 %02hhx
推荐阅读
- csv - 解析 CSV 文件并按行进行 API 调用的最佳数据处理软件
- api - People.get 的 People api 没有获取其他用户的姓名、照片
- php - 在 SQL 中获取不带索引的 show create table 查询
- python - Python Plotly Dash 下拉列表为散点图添加“全选”
- java - 无法在 Docker 中部署的 Jenkins 中安装插件
- omnet++ - 为什么我的 OMNeT++ 项目中的汽车会移出我的地图(launchd.xml 文件)?
- c# - 在 C# 中,使用类构造函数设置属性和直接设置属性成员之间有区别吗?
- javascript - 用 map() 变换对象数组
- sharepoint - 在 ASP.Net 站点中使用 PNP.Framework 创建 SharePoint 客户端上下文时出现页面超时异常
- angular - 在 ngClass 中实现该方法时,如何从我的 HTML 文件中删除错误?