2011-06-11 59 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,并且这两者在硬盘驱动器中都有不同的编码。

相关问题