`wc -c` дает непредвиденные результаты?

У меня есть файл .log, который является двоичным файлом (BSC0000.log). Так что просмотрел его в программе просмотра HEX (OKteta) и экспортировал прямо в строку (split_space.txt). С пробелами в середине как 00 DF 00 45.

Дело в том, что когда я посчитал символы в обоих файлах, это показало огромную разницу.

laksith@laksithPC:~/Desktop/test$ cat split_space.txt | wc -c
31617470
laksith@laksithPC:~/Desktop/test$ cat BSC0000.log | wc -c
10539157

Можно предположить, что это может быть из-за пробелов между ними. Но тогда это должно быть примерно как 10539157 + 10539157/2, но как получается, что это значение 31617470.

но 10539157 * 3 = 31617471, то есть значение из командной строки +1

4
задан 23 September 2015 в 07:46

1 ответ

Байт имеет 8 битов. Поскольку шестнадцатеричное число использует 16 символов, 0-9a-f, это может только отобразить четыре бита за символ. требуется два шестнадцатеричных символа для отображения одного байта. Добавляют к тому, что большинство символов в шестнадцатеричном дисплее имеет пространство после них, и Вы видите, почему шестнадцатеричный дисплей берет до трех раз в качестве больше, чем двоичный файл.

Пример

Позволяют нам создать файл, содержащий единственный байт:

$ printf 'a' >afile
$ wc afile
0 1 1 afile

Теперь, давайте отобразим его с, например, hexdump -C:

$ hexdump -C afile
00000000  61                                                |a|
00000001

a символ является символом ASCII 61 (шестнадцатеричное число). Единственный байт в файле берет два символа для отображения в шестнадцатеричном числе (и три, если у шестнадцатеричного числа есть пространство после него).

5
ответ дан 23 September 2015 в 17:46
  • 1
    Ответ кажется прекрасным действительно, и никакая потребность закрыть вопрос, по моему скромному мнению, – Zanna 21 January 2017 в 02:12

Другие вопросы по тегам:

Похожие вопросы: