我有一个名为 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]);
这个函数的输出是 height=65460,0,ffffffb4
虽然其他时候输出的是height=180,0,b4
请告知其背后的原因
最佳答案
在 printf() 中,%X 格式说明符是十六进制 int。如果您将 char 作为参数传递并且设置了最高有效位,则它应该进行符号扩展以填充整数的大小。编译器可能会通过打包变量进行优化,有时您的变量可能会在字节边界方面的不同位置(即 char 可能以 32 位整数的最低有效字节或最高有效字节结束)。此访问可能会导致此行为。
关于c++ - 显示数组中存储的 Hexa 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840517/