'wc -c' не дает ожидаемых результатов?

4

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

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

[email protected]:~/Desktop/test$ cat split_space.txt | wc -c
31617470
[email protected]:~/Desktop/test$ cat BSC0000.log | wc -c
10539157

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

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

    
задан Laksith 23.09.2015 в 06:25
источник

1 ответ

5

Байт имеет 8 бит. Поскольку hex использует 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 (hex). Один байт в файле принимает два символа для отображения в шестнадцатеричном формате (и три, если после него имеет пробел).

    
ответ дан John1024 23.09.2015 в 06:38
источник