什么是二进制数据?

5

gcc 4.6.0

gcc 4.6.0是一种编译器,它用于将源代码转换为可执行文件或动态链接库。

二进制数据是什么样子的?它是全部由1和0组成的吗?

我正在想,因为我正与另一个程序员讨论复制字符串和二进制数据。

通常,我使用strcpy / strncpy函数来复制字符串,而使用memcpy / memmove来复制二进制数据。但是,我只是想知道它长什么样子?

非常感谢您的任何建议,


7
“看起来像”是什么意思?计算机上的所有数据都是由1和0组成的,这取决于你想如何表示它。 - Rob
5个回答

18

取决于你用什么来查看它。这里是十六进制和ASCII:

jcomeau@intrepid:~$ 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  ................

还有另一种看待它的方式:

jcomeau@intrepid:~$ convert -size 640x$(($(stat -c %s /bin/bash)/640)) \
 -depth 8 gray:/bin/bash /tmp/bash.png
jcomeau@intrepid:~$ firefox /tmp/bash.png

在此输入图片描述


2
啊,我们居然见证了这样的时代,你只需要将一张640像素宽的图片放入网页中,而不必担心人们的屏幕是否能够处理它。甚至不必担心他们的浏览器窗口是否能够处理它。更不必担心页面布局内窄小的内容列是否能够处理它;-) - Steve Jessop
1
那张图片很美。 - joel

9

二进制数据只是一种说法,表示它不是文本数据。换句话说,它并不能让你深入了解数据的内容,而是让你了解数据不是什么。

有趣的是,在技术上,文本也属于二进制数据。


6
在这种情况下,“二进制数据”通常指可能包含空字节(例如'\0')的数据。像strcpy()strncpy()这样的字符串操作函数会在遇到这些字符时停止,而像memcpy()memmove()这样的字节操作函数将始终继续执行您告诉它们要处理的字节数。

这是一条实用的建议。然而,这可能看起来像一个愚蠢的问题。但是你怎么知道你要复制的内容是二进制数据格式还是字符串格式呢?我猜如果你不知道,那就说明你不了解你的程序。 - ant2009
1
@ant2009:没错。谁给你指针,就应该告诉你它指向什么。 - Steve Jessop

4

二进制数据就是以二进制形式编码的数据。要更好地查看二进制文件的内容,您需要使用像Windows的Hiew Editor或Linux的hexedit这样的十六进制编辑器。


0

这都是由一和零组成的。但是在你的电脑上,这些一和零的存在方式是不同的。CPU看待这些一和零的方式与DRAM不同,而这两者在硬盘中的编码也是不同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接