将两个字节的char分成两个单字节字符

0 c char

我有一个值为0xB3的char值,我需要将它分成两个单独的char.所以X = 0xB,Y = 0x3.我试过以下代码:

int main ()
{
    char addr = 0xB3;
    char *p = &addr;

    printf ("%c, %c\n", p[0], p[1]);          //This prints ?, Y
    printf ("%X, %X\n", p[0], p[1]);          //This prints FFFFFFB3, 59

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为了澄清,我需要将值为00的任何2字节字符值转换为FF,并将第一个和第二个字节拆分为单独的字符.谢谢.

Fre*_*Foo 5

直接来自维基百科:

#define HI_NIBBLE(b) (((b) >> 4) & 0x0F)
#define LO_NIBBLE(b) ((b) & 0x0F)
Run Code Online (Sandbox Code Playgroud)

HI_NIBBLE(addr)就是0xB.但是,0x00通过0xFF不是"双字节".它们是单字节值.单个十六进制数字可以占用16个字节,而一个字节可以占用256 =16²,因此您需要两个十六进制数字来表示任意字节值.