我有一个值为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,并将第一个和第二个字节拆分为单独的字符.谢谢.
直接来自维基百科:
#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²,因此您需要两个十六进制数字来表示任意字节值.