二进制文件的行数是什么意思?
What does a line count of a binary file mean?
:~$ wc -l bitmap.bmp
12931 bitmap.bmp
我猜二进制文件就像一个流,上面没有行。那么当你谈论二进制文件中的行时,它是什么意思?
(注意:"wc -l"计算一个文件的行数)
Alex Taylor 在下面指出,正如我所怀疑的那样,wc 正在计算文件中 /n 个字符的数量。
所以问题就变成了:
当 wc 将二进制文件转换为文本时,wc 发现的 '\n' 字符是随机存在的,还是实际上存在于二进制文件中?比如 b'\n'(在 Python 中)?如果是,为什么有人会在二进制文件中使用换行符?
数据中换行符('\n')的个数
查看 source code for MacOS' wc
,我们看到以下代码:
if (doline) {
while ((len = read(fd, buf, buf_size))) {
if (len == -1) {
warn("%s: read", file);
(void)close(fd);
return (1);
}
charct += len;
for (p = buf; len--; ++p)
if (*p == '\n')
++linect;
}
它对文件进行缓冲读取,然后循环遍历数据,如果找到“\n”则递增计数器。
GNU version of wc 包含类似的代码:
/* Increase character and, if necessary, line counters */
#define COUNT(c) \
ccount++; \
if ((c) == '\n') \
lcount++;
至于为什么二进制文件中有换行符,它们只是另一个值(0x0A最常见的OS') .除非文件被解释为文本文件,否则字符没有什么特别之处。同样,制表符、数字和所有其他 'text' 字符也将出现在二进制文件中。这就是为什么在二进制文件上使用 cat
会导致终端发出疯狂的哔哔声——它试图显示 BEL
字符 (0x07)。文本只是约定俗成的文本。
:~$ wc -l bitmap.bmp
12931 bitmap.bmp
我猜二进制文件就像一个流,上面没有行。那么当你谈论二进制文件中的行时,它是什么意思?
(注意:"wc -l"计算一个文件的行数)
Alex Taylor 在下面指出,正如我所怀疑的那样,wc 正在计算文件中 /n 个字符的数量。
所以问题就变成了: 当 wc 将二进制文件转换为文本时,wc 发现的 '\n' 字符是随机存在的,还是实际上存在于二进制文件中?比如 b'\n'(在 Python 中)?如果是,为什么有人会在二进制文件中使用换行符?
数据中换行符('\n')的个数
查看 source code for MacOS' wc
,我们看到以下代码:
if (doline) {
while ((len = read(fd, buf, buf_size))) {
if (len == -1) {
warn("%s: read", file);
(void)close(fd);
return (1);
}
charct += len;
for (p = buf; len--; ++p)
if (*p == '\n')
++linect;
}
它对文件进行缓冲读取,然后循环遍历数据,如果找到“\n”则递增计数器。
GNU version of wc 包含类似的代码:
/* Increase character and, if necessary, line counters */
#define COUNT(c) \
ccount++; \
if ((c) == '\n') \
lcount++;
至于为什么二进制文件中有换行符,它们只是另一个值(0x0A最常见的OS') .除非文件被解释为文本文件,否则字符没有什么特别之处。同样,制表符、数字和所有其他 'text' 字符也将出现在二进制文件中。这就是为什么在二进制文件上使用 cat
会导致终端发出疯狂的哔哔声——它试图显示 BEL
字符 (0x07)。文本只是约定俗成的文本。