2013-02-10 85 views

回答

3

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

存储在变量中的值是二进制的 - 我认为这只是你如何看待它而使你感到困惑。 0x55,85'U'都是解释相同数据的不同方式。

+0

谢谢。我怎样才能看到二进制表示? – user2057841 2013-02-10 22:42:12

+0

十六进制或八进制是在gdb中最接近的 - 它没有“binary”作为输出格式。 – 2013-02-10 22:46:27

+0

@MatsPetersson,GDB支持'x'和'p'命令的二进制输出。 user2057841,在这种情况下使用'p/t byte'。 – 2013-02-10 22:46:56

2

使用正确的formatting flags on print

任何我当然希望你的编译器,使0x55的成0x01010101,没有别的。

+0

我不想打印,我只是想保留十六进制或二进制值,所以我可以做转换和其他操作。谢谢 – user2057841 2013-02-10 22:40:00

+0

对,所以你说“gdb显示变量为U或85”,这是二进制数字0x01010101的字符和十进制表示形式。在计算机中,所有数字都以二进制形式存储。当您打印它们时,它们的显示方式对我们如何阅读它们有所影响。你的号码是相同的,无论是显示为U还是85,还是0x55或0125(最后一个是八进制) - 这只是一个如何让人可读的问题。 – 2013-02-10 22:42:36

+0

好的。我看到,二进制文件应该是0x01010101。但是如果我做x/wt和字节,我得到:11110111111110000010111101010101。开头的所有数字在哪里?我只想在末尾输入正确的数字 – user2057841 2013-02-10 22:44:43

3

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

(gdb) p/x byte 
+0

哦,好的,谢谢!我正在使用x/wt来打印,并且没有打印正确的二进制文件。我尝试了你的建议,它打印0x55。这是否意味着它实际上存储了正确的值?我怎样才能看到二进制表示? – user2057841 2013-02-10 22:40:29

+0

对不起,我昨天刚刚加入网站,不确定工作情况。我想接受多个答案,并且也得票,但我还没有足够的积分来做到这一点。我欠你一个:) – user2057841 2013-02-11 00:02:31

1

发生了什么事?

什么也没有发生。它不在数组中的十六进制中。它在数组中是二进制的。它在源代码中是十六进制的。如果您想将其格式化为十六进制,请这样做。没有人阻止你。