c语言里怎么让按十六进制读取的数也按十六进制输出???
答案:3 悬赏:0 手机版
解决时间 2021-02-19 21:06
- 提问者网友:抽煙菂渘情少年
- 2021-02-19 02:19
c语言里怎么让按十六进制读取的数也按十六进制输出???
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-02-19 02:57
不信这段代码能过编译!
按什么进制输出与用什么进制输入无关。
把printf("%#x ",text[i]);改成printf("0x%02x ",test[i]&255);。追问真的可以通过编译啊...只不过用的unsigned char。不过你给的这种方式果然对了!%02x是强制两个数输出吗?追答能通过编译?就text没有声明就过不了吧?
%02x是强制两个数输出,不足两个数时前面补0;而实际多于2个数时%02x并不能截断,所以由对输出变量作&255截取2位,不然会把8以上开头的数字都输出成0xFFFFFF??。追问我在最开始声明了char test[10];实际程序我写的是unsigned char test[10];
对于char test[10]确实如果不做&255截取的话会输出成0xFFFFFF??,如果是unsigned char test[10] 的话好像不用截取也是可以的,多谢指教!追答unsigned这样声明了就不用&255了,因为它永远是正数;正数的前导是0,前导0输出时被自动精简;只有负数才会被符号位扩展而生成FFF...前导!
按什么进制输出与用什么进制输入无关。
把printf("%#x ",text[i]);改成printf("0x%02x ",test[i]&255);。追问真的可以通过编译啊...只不过用的unsigned char。不过你给的这种方式果然对了!%02x是强制两个数输出吗?追答能通过编译?就text没有声明就过不了吧?
%02x是强制两个数输出,不足两个数时前面补0;而实际多于2个数时%02x并不能截断,所以由对输出变量作&255截取2位,不然会把8以上开头的数字都输出成0xFFFFFF??。追问我在最开始声明了char test[10];实际程序我写的是unsigned char test[10];
对于char test[10]确实如果不做&255截取的话会输出成0xFFFFFF??,如果是unsigned char test[10] 的话好像不用截取也是可以的,多谢指教!追答unsigned这样声明了就不用&255了,因为它永远是正数;正数的前导是0,前导0输出时被自动精简;只有负数才会被符号位扩展而生成FFF...前导!
全部回答
- 1楼网友:十鸦
- 2021-02-19 04:06
printf("0x%-2d",text[i]); 0x为16进制前缀,%-2d表示总共输出两位整数,不足位往后补0。追问-2d就成十进制输出了,我换成-2x的话会变成0x0,说明我输入00后这个数就是被设成0了,输出也没法成00了...追答这个得转换,你可以自己写进制转换的代码,也可以调函数,十进制毕竟跟16进制还是有区别的,c语言不是很擅长,很少用,网上有很多进制转换的代码,和控制输出格式的函数,你可以去看看。追问恩恩,多谢!追答
没有什么大的要求,其实就这个就可以了,当然自己转换更灵活一些。
没有什么大的要求,其实就这个就可以了,当然自己转换更灵活一些。
- 2楼网友:刀戟声无边
- 2021-02-19 04:00
scanf("%hhx",&text[i]);追问
%hhx是啥格式啊?试了好像不行呢,还是输出0追答printf("%#02hhx ",text[i]);追问这样子的话确实输出00了,但不是0x00,上头有人解答的"0x%02x "这种格式就可以了,强制输出0x了,不过还是谢谢解答了!
%hhx是啥格式啊?试了好像不行呢,还是输出0追答printf("%#02hhx ",text[i]);追问这样子的话确实输出00了,但不是0x00,上头有人解答的"0x%02x "这种格式就可以了,强制输出0x了,不过还是谢谢解答了!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯