В двоичном файле есть строки и несколько чисел. Если я делаю
od -c filename
или strings filename
, я могу видеть строки правильно. Но как насчет чисел? Они в каком-то странном формате.
Текст после выполнения od -c filename
выглядит так:
0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 сек 1 0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 - 002 3 001 0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1 0000060 - 002 3 001 r \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 × 0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0 0000120 \ 0 \ 0 osfeu 1 - 002 3 001 - 235 0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 С \ a \ 0 \ 0 0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1
Как это расшифровать?
Я даже пытался hexdump -C filename
Вывод выглядит так:
00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 | 00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... О.3. | 00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 | 00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × | 00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. | 00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. | 00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..С ... | 00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |
Чтобы уточнить, основной файл, который является обычным файлом, имел один атрибут, который отображал, в каком-то странном формате, поэтому мы смотрим на необработанный / двоичный файл.
Выполнение восьмеричного дампа на обычном файле решило проблему с просмотром.
С помощью grep 'id=123' regular_file | head -1 | od -c
я смог увидеть, какой номер был там. Я ожидал 1, он показал нам как 001.
not text
в этом представлении ASCII это не означает, что это ASCII для программы, которая читает файл. например. Номер 7957706749327538292 при кодировании в виде 64-разрядного целого числа без знака с прямым порядком байтов. выглядит в представлении ASCII:not text
.Ответы:
Есть много способов хранения чисел - ASCII (который может иметь определенные для локали варианты, такие как использование ',' для разделения дробной части ИЛИ как тысячи групп), двоичное целое число (переменное число бит) / float / double (все которая может варьироваться в зависимости от архитектуры с прямым порядком байтов и от того, формализует ли программное обеспечение, производящее файл, представление), BCD (несжатый, упакованный, с фиксированной запятой и другие варианты), двоично-двоичное кодированное десятичное число ...
Там нет стандарта.
источник
Одной из первых вещей, которые мне пришлось запоминать для информатики, была Data + Interpretation = Полезная информация . Следствием этого является то, что если вам не хватает данных или интерпретации, у вас ничего нет. Сами данные не могут сказать вам, как их интерпретировать. (у вас могут быть метаданные, которые сообщают вам об этом, но тогда вам также нужно знать, как интерпретировать метаданные )
В этих обстоятельствах я предлагаю попробовать это:
Если это приходит с чем-то вроде:
и вы абсолютно не представляете, что это за формат, из какой он программы, как она используется или что-то о содержимом
filename
, тогда вам, вероятно, следует отказаться.Восьмеричный вывод дампа
od
(восьмеричный дамп) создает гибридный текстово-восьмеричный дамп. Non-номер либо печатные символы , такие какo
,s
,f
, и т.д., или непечатаемые символы , такие как\0
(ASCII 0,NUL
), или\a
(ASCII 7BEL
), или числа в базе 8, со стандартным префиксом C0
(например ,032
= 26 в десятичная дробь). Ваш файл интерпретируется как поток 8-битных байтов .Вывод шестнадцатеричного дампа
hexdump
создает традиционный шестнадцатеричный дамп, в котором один столбец перечисляет 8-битные байты в шестнадцатеричном формате, а другой показывает, каким символам ASCII эти байты соответствуют, если они есть (если значение байта является непечатным символом ASCII или не является символом ASCII вообще ,.
показано в этой позиции). Опять же, ваш файл интерпретируется как поток 8-битных байтов .Целые
Если ваш файл содержит 100% двоичных целых чисел (т. Е. Представляет собой однородный одномерный массив без заголовков какого-либо целочисленного представления), то вы должны ответить себе на все эти вопросы:
Наверное, сейчас я забуду еще кое-что.
И это только для одномерного единого массива целых чисел, происходящего из обычной современной компьютерной архитектуры. Если ваши данные имеют какую-либо сложность, все будет так сложно, выиграть в лотерею быстрее, чем просто угадать формат. И вы должны угадать (обоснованное предположение, но предположение), если вы не знаете формат.
источник