格式化_snprintf_s的测试

由于出现了这种错误,所以我写了些代码测试_snprintf_s的格式化规则

(windows下),比如以下代码

char buff[256]={0};
unsigned int a=5,b=9,d=10;//32位
unsigned char ch=5,ch1=3;//8位
unsigned short sh=7;//16位
unsigned __int64 c=6;//64位
_snprintf_s(buff,255,"%llu",ch,ch1,ch,ch1,b);
cout<<buff<<endl;

输出结果并不是像我预期的那样把ch,ch1,ch,ch1,b总共64位输出来也

就是

buff = ch的8位二进制前面补零+ch1的8位二进制前面补零+ch的8位二

进制前面补零

+ch1的8位二进制前面补零+b的32位二进制前面补零

而输出结果是12884901893,其二进制形式是

1100000000000000000000000000000101,也就是说只取了前面ch和ch1

而且把它们不足32位的补零成了32位,为此我再更改了代码测试了一

_snprintf_s(buff,255,"%llu",ch,sh);

输出结果是30064771077,其二进制是

11100000000000000000000000000000101,也是把16位的sh和8位的ch

补零成32位的而且格式化的顺序是从右到左的顺序

以上是在windows下vs05测试得出来的结果,linux下还待测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值