MFC C++ Format 16进制输出时需要注意的一点

今天在处理MAC地址时,遇到之前没有注意的一个问题,特此记录。

在需要字符串格式化输出的时候自然而然的想到了Format函数,MAC地址需要以两位宽度十六进制形式输出,所以我就直接写了%x ,但是在实际输出时遇到一个错误输出格式变成了:·"fffffff0",应该是f0啊.

首先确定自己的程序没有写错,然后简单分析下,只要是0xf*这种就会变成上述的情况,,很明显应该是进位或者符号位问题。

google了下,找到篇博客介绍printf,摘录里面的一段:

究其原因,%x 是 unsigned int  或  int  型输出 ,所以 printf("%x", a) 在执行时将自动将 a 类型提升(char 将提升至 int;unsigned char 将提升至 unsigned int), 注意到 char 是 signed(有符号的),如果这时 a 是负数 ,在提升的时候前面将会补1 ,即象反例中的 0xf1 => 0xfffffff1;而unsigned char 在提升的时候只会补0。”

所以解决方法也就明确了:

	str1.Format("%02x", (unsigned char)mac[3]);
	str2.Format("%02hhx", mac[3]);
	str3.Format("%02x", (mac[3] & 0xff));

上面代表了三种方法:

第一行是进行强制转换。

第二行是进行精确打印格式

第三行是强制变为1byte

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值