Last Updated: 2024-01-04 10:48:15 Thursday
-- TOC --
char占用1个byte,在使用printf打印输出的时候,有一点小技巧。
写了一个函数,打印char的2进制序列,我常常用这个函数来观察一些C语言的细节。
void pbins(char a) {
unsigned char x = 0x80;
while (x) {
if (x & a)
printf("1");
else
printf("0");
x >>= 1;
}
}
unsigned number,算数右移补0!
任意内存地址,cast到char后,都可以用此函数打印出最底层的细节。比如查看浮点数的格式。
恐怕很多人都遇到过,printf用%X打印char,输出的是一个int,前面一堆FF。这是因为当char的最高位为1时,C语言进行了Integral Promotion,扩展为了一个32位的singed int输出。要避免这种情况,需要做一个unsigned char的cast:
printf("%02X ", (unsigned char)rbuf[i]);
%02x
,表示打印2位的16进制数据,不足2位用0补位。
rbuf[i]
被cast为unsigned char
,输出就正常了,看到的都是一个个的byte,没有前面的FF了。(其实前面有一堆0,默认不显示出来的)
本文链接:https://cs.pynote.net/sf/c/202112122/
-- EOF --
-- MORE --