gcc 4.6.0什麼是二進制數據?
二進制數據是什麼樣的?這是全1和0。
我只是想知道,因爲我正在與另一位程序員談論複製字符串和二進制數據。
通常,我使用strcpy/strncpy函數來複制字符串和memcpy/memmove來複制二進制數據。但是,我只是想知道它是什麼樣子?
非常感謝您的任何建議,
gcc 4.6.0什麼是二進制數據?
二進制數據是什麼樣的?這是全1和0。
我只是想知道,因爲我正在與另一位程序員談論複製字符串和二進制數據。
通常,我使用strcpy/strncpy函數來複制字符串和memcpy/memmove來複制二進制數據。但是,我只是想知道它是什麼樣子?
非常感謝您的任何建議,
在此背景下,「二進制數字」通常只是數據可能包含空字節(例如,'\0'
)。像strcpy()
和strncpy()
這樣的字符串處理函數將在它們看到這些字符時停止,而像memcpy()
和memmove()
這樣的字節操作函數將始終保持您告訴它們的字節數。
這是可靠的建議。但是,這可能看起來像一個愚蠢的問題。但是,您如何知道您正在複製的內容可能是二進制數據格式或字符串格式。我想如果你不知道,那麼你不知道你的程序。 – ant2009 2011-06-11 05:27:13
@ ant2009:正好。給你指針的人也應該告訴你它指向的是什麼。 – 2011-06-11 09:07:26
取決於你使用的查看它的內容。在這裏它在十六進制和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
啊,我們一直都在看這樣的時代,你可以將一個640寬的圖片粘貼到網頁上,而不必擔心人們的屏幕是否可以處理它。或者甚至他們的瀏覽器窗口是否可以處理它。或者甚至瀏覽器窗口內頁面佈局中的窄內容列是否可以處理它;-) – 2011-06-11 09:10:36
二進制數據就是這樣,以二進制形式編碼的數據。爲了更好地查看二進制文件的內容,您需要一個十六進制編輯器,例如用於Windows的Hiew Editor或用於Linux的hexedit。
二進制數據只是一種說法,它是不是文本的數據。換句話說,它實際上並沒有給你很多洞察力,關於什麼數據是,而是它給你洞察什麼數據不是。
奇怪的是,在最具技術意義的單詞中,文本也是二進制數據。
這是全1和零。但這些和零在您的計算機上的生活方式不同。 CPU看到的不同於DRAM的1和0,並且這兩者在硬盤驅動器中都有不同的編碼。
你是什麼意思的'看起來像'?計算機上的所有數據都是1和0,這取決於您想如何表示它。 – Rob 2011-06-11 05:10:10