c++ - 显示数组中存储的 Hexa 值

标签 c++

我有一个名为 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/

相关文章:

c++ - 如何在调试时观察多个变量而不在断点处停止?

c++ - 函数 try block 的目的是什么?

python - 格式不是字符串文字,也没有格式参数 [-Wformat-security]

c++ - 在同一对象中设置私有(private)变量的回调函数

c++ - 如何将从 Google AddressSanitizer 抛出的错误记录到日志文件中

c++ - 错误 C2872 : 'range_error' : ambiguous symbol

c++ - ostream 中的负精度值

c++ - 已初始化静态变量的警告 C26495

c++ - 使用 QNetworkAccessManager 的插槽错误

C++:所有 boost 路径操作段错误 (OSX/GCC)