我有一个这样的数组:
unsigned char arr[] = {0x55};
unsigned char byte = arr[0];
我希望将byte作为十六进制表示,就像它在数组中一样。 但是当我在gdb中查看它时,我不断得到那个字节是85'U'。发生了什么事?为什么我看不到0x55,甚至二进制表示110111?
感谢您的帮助!
答案 0 :(得分:3)
GDB显示与0x55
字符代码对应的可打印字符,因为您拥有的值为char
类型。要将其打印为十六进制,请使用:
(gdb) p/x byte
答案 1 :(得分:3)
使用p/x byte
来查看它。除非您另有说明,否则gdb
默认为打印小数。您获得了'U'
,因为这也是打印char
类型变量的默认值的一部分。
存储在变量中的值是二进制的 - 我认为只是你在看它时会让你感到困惑。 0x55
,85
和'U'
都是解释相同数据的不同方式。
答案 2 :(得分:2)
使用正确的formatting flags on print:
任何我肯定希望您的编译器将0x55变为0x01010101而不是其他任何东西。
答案 3 :(得分:1)
发生了什么事?
什么都没发生。它在数组中不是十六进制。它是数组中的二进制。它在源代码中是十六进制的。如果要将其格式化为十六进制,请执行此操作。没有人阻止你。