当我从C中的数组中获取十六进制值时,如何保持十六进制格式?

时间:2013-02-10 22:34:46

标签: c gdb

我有一个这样的数组:

   unsigned char arr[] = {0x55}; 
   unsigned char byte = arr[0];

我希望将byte作为十六进制表示,就像它在数组中一样。 但是当我在gdb中查看它时,我不断得到那个字节是85'U'。发生了什么事?为什么我看不到0x55,甚至二进制表示110111?

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

GDB显示与0x55字符代码对应的可打印字符,因为您拥有的值为char类型。要将其打印为十六进制,请使用:

(gdb) p/x byte

答案 1 :(得分:3)

使用p/x byte来查看它。除非您另有说明,否则gdb默认为打印小数。您获得了'U',因为这也是打印char类型变量的默认值的一部分。

存储在变量中的值是二进制的 - 我认为只是你在看它时会让你感到困惑。 0x5585'U'都是解释相同数据的不同方式。

答案 2 :(得分:2)

使用正确的formatting flags on print

任何我肯定希望您的编译器将0x55变为0x01010101而不是其他任何东西。

答案 3 :(得分:1)

  

发生了什么事?

什么都没发生。它在数组中不是十六进制。它是数组中的二进制。它在源代码中是十六进制的。如果要将其格式化为十六进制,请执行此操作。没有人阻止你。