2011-06-11 212 views
2

gcc 4.6.0什麼是二進制數據?

二進制數據是什麼樣的?這是全1和0。

我只是想知道,因爲我正在與另一位程序員談論複製字符串和二進制數據。

通常,我使用strcpy/strncpy函數來複制字符串和memcpy/memmove來複制二進制數據。但是,我只是想知道它是什麼樣子?

非常感謝您的任何建議,

+7

你是什麼意思的'看起來像'?計算機上的所有數據都是1和0,這取決於您想如何表示它。 – Rob 2011-06-11 05:10:10

回答

4

在此背景下,「二進制數字」通常只是數據可能包含空字節(例如,'\0')。像strcpy()strncpy()這樣的字符串處理函數將在它們看到這些字符時停止,而像memcpy()memmove()這樣的字節操作函數將始終保持您告訴它們的字節數。

+0

這是可靠的建議。但是,這可能看起來像一個愚蠢的問題。但是,您如何知道您正在複製的內容可能是二進制數據格式或字符串格式。我想如果你不知道,那麼你不知道你的程序。 – ant2009 2011-06-11 05:27:13

+0

@ ant2009:正好。給你指針的人也應該告訴你它指向的是什麼。 – 2011-06-11 09:07:26

15

取決於你使用的查看它的內容。在這裏它在十六進制和ASCII:

[email protected]:~$ xxd /bin/bash | head -n 10 
0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000 .ELF............ 
0000010: 0200 0300 0100 0000 5021 0608 3400 0000 ........P!..4... 
0000020: 345c 0c00 0000 0000 3400 2000 0800 2800 4\......4. ...(. 
0000030: 1c00 1b00 0600 0000 3400 0000 3480 0408 ........4...4... 
0000040: 3480 0408 0001 0000 0001 0000 0500 0000 4............... 
0000050: 0400 0000 0300 0000 3401 0000 3481 0408 ........4...4... 
0000060: 3481 0408 1300 0000 1300 0000 0400 0000 4............... 
0000070: 0100 0000 0100 0000 0000 0000 0080 0408 ................ 
0000080: 0080 0408 c013 0c00 c013 0c00 0500 0000 ................ 
0000090: 0010 0000 0100 0000 c013 0c00 c0a3 1008 ................ 

這裏是另一種方式來查看:

[email protected]:~$ convert -size 640x$(($(stat -c %s /bin/bash)/640)) \ 
-depth 8 gray:/bin/bash /tmp/bash.png 
[email protected]:~$ firefox /tmp/bash.png 

enter image description here

+2

啊,我們一直都在看這樣的時代,你可以將一個640寬的圖片粘貼到網頁上,而不必擔心人們的屏幕是否可以處理它。或者甚至他們的瀏覽器窗口是否可以處理它。或者甚至瀏覽器窗口內頁面佈局中的窄內容列是否可以處理它;-) – 2011-06-11 09:10:36

2

二進制數據就是這樣,以二進制形式編碼的數據。爲了更好地查看二進制文件的內容,您需要一個十六進制編輯器,例如用於Windows的Hiew Editor或用於Linux的hexedit。

7

二進制數據只是一種說法,它是不是文本的數據。換句話說,它實際上並沒有給你很多洞察力,關於什麼數據,而是它給你洞察什麼數據不是

奇怪的是,在最具技術意義的單詞中,文本也是二進制數據。

0

這是全1和零。但這些和零在您的計算機上的生活方式不同。 CPU看到的不同於DRAM的1和0,並且這兩者在硬盤驅動器中都有不同的編碼。