c++ - 以十六进制打印数据结构值

标签 c++

typedef struct AbcStruct{

   short        LD;
   short        EL;
   short        CL;        
   AbcStruct( short b, short res = 0, short lr = 1000): LD( b ), EL(res), CL( lr ) { }
};

int main () 
{

    struct AbcStruct A2(200, 100, 100);

    char *string_ptr = (char *)&A2;
    kk = sizeof(AbcStruct);

    while(kk--)
        printf(" %x ", *string_ptr++);
}

输出(十六进制的 AbcStruct):

ffffffc8  0  64  0  64  0

我想知道为什么第一个元素的输出包含 4 个字节:ffffffc8 而我期望它只会打印 c8

谢谢

最佳答案

这样做是因为您正在打印的字符的第一位是 1,因此字符被解释为负数。当您使用默认的 %x 格式打印时,要打印的值被解释为 int(比 char 大得多).因此,符号 gets copied到所有其他位置,使您在输出中看到那些 f

一个修复方法是使用 %hhx 进行打印(您告诉 printf 您正在打印 unsigned char 值)。

printf(" %hhx ", *string_ptr++);

另一个修复方法是将 string_ptr 的类型更改为 unsigned char

unsigned char *string_ptr = (char *)&A2;

或者,您可以将它们结合起来。

关于c++ - 以十六进制打印数据结构值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430502/

相关文章:

c++ - 如何纠正这个常量?

c++ - 无法重载虚函数

c++ - 禁用窗口大小调整 Win32

c++ - QAbstractItemModel:为什么在将大量项目插入模型时发出 dataChanged 和插入行信号如此缓慢?

c++ - 如何 static_assert 给定的函数调用表达式是否可以编译?

c++ - 有没有办法交换 std::list 中的节点?

c++ - 如何取回从 Eclipse CDT 中的构建配置中排除的文件?

c++ - C++ 中的 std::map 键

java - 将数据从 C++ 传递到 Java 的最有效(最快)方式是什么?

c++ - C++的 "map"容器是否对字符串的连续子串应用Rabin-Karp算法?