我有和hexa值的数组调用 const char receiptLogo [] = {0x01,0x80,0x00,0xB4};
当我试图获取值Rprintf(“%x \ r \ n”,receiptLogo [3]);
值显示为“ffffffb4”,有时显示为“b4”
整个功能如下 void PRINT_PrintLogo(const char Data []) {
unsigned int height=0;
const char receiptLogo[] = {0x01,0x80,0x00,0xB4};
height=(((unsigned short)receiptLogo[2] ) << 8) | ((unsigned short)receiptLogo[3] );
Rprintf("height=%d,%x,%x\r\n",height,Data[2],Data[3]);
}
此功能的输出是 高度= 65460,0,ffffffb4
虽然在其他时候输出是高度= 180,0,b4
请告知其背后的原因
答案 0 :(得分:1)
在printf()中,%X格式说明符是十六进制int。如果您将char作为参数传递并且设置了最高有效位,则应签署extend以填充整数的大小。编译器可以通过打包变量进行优化,有时你的变量在字节边界的不同位置(即char可能最终在32位整数的最低有效字节或最高有效字节)。此访问可能会导致此行为。