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