2013-02-10 92 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

發生了什麼事?

什麼也沒有發生。它不在數組中的十六進制中。它在數組中是二進制的。它在源代碼中是十六進制的。如果您想將其格式化爲十六進制,請這樣做。沒有人阻止你。