按二进制或十六进制打印char

Last Updated: 2024-01-04 10:48:15 Thursday

-- TOC --

char占用1个byte,在使用printf打印输出的时候,有一点小技巧。

二进制打印char

写了一个函数,打印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后,都可以用此函数打印出最底层的细节。比如查看浮点数的格式

十六进制打印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 --