El archivo binario tiene cuerdas y algunos números, si lo hago
od -c filename
o strings filename
, puedo ver las cuerdas correctamente. Pero, ¿qué pasa con los números? Están en algún formato extraño.
El texto después de hacerlo od -c filename
es así:
0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 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 \ 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
¿Cómo descifrar esto?
Incluso lo intenté hexdump -C filename
La salida es así:
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 |
Para aclarar, el archivo principal, que es un archivo normal, tenía un atributo que se mostraba, tiene un formato extraño, por lo que estamos viendo el archivo sin formato / binario.
Al hacer un volcado octal en el archivo normal, se resolvió el problema de visualización.
Con grep 'id=123' regular_file | head -1 | od -c
, pude ver qué número había allí. Esperaba 1, nos mostró como 001.
not text
en esa vista ASCII, no significa que sea ASCII para el programa que lee el archivo. p.ej. El número 7957706749327538292 cuando se codifica como un entero sin signo little-endian de 64 bits. Parece que este en la vista ASCII:not text
.Respuestas:
Hay muchas formas de almacenar números: ASCII (que puede tener variantes locales específicas, como usar ',' para separar la parte fraccional O como una agrupación de miles), entero binario (número variable de bits) / flotante / doble (todos que puede variar según la arquitectura endian y si el software que produce el archivo formaliza la representación), BCD (sin comprimir, empaquetado, punto fijo y otras variantes), decimal codificado bi-quinario ...
No hay un estándar.
fuente
Una de las primeras cosas que tuve que memorizar para la informática fue Datos + Interpretación = Información útil . Un corolario de esto es que si te faltan datos o interpretación, no tienes nada. Los datos en sí no pueden decirle cómo interpretarlos. (puede tener metadatos que le indiquen esto, pero también necesita saber cómo interpretar los metadatos )
Dadas las circunstancias, sugiero probar esto:
Si surge algo como:
y usted tiene absolutamente ninguna idea de lo que el formato es, qué programa es, qué es su uso, ni nada sobre el contenido de
filename
, a continuación, probablemente debería renunciar.Salida de volcado octal
od
(volcado octal) produce un volcado híbrido de texto y octal. Los no números son caracteres ya sea imprimibles, tales comoo
,s
,f
, caracteres, etc, o no imprimibles, tales como\0
(ASCII 0,NUL
), o\a
(ASCII 7,BEL
), o los números en la base 8, con el prefijo C estándar0
(por ejemplo032
= 26 en decimal). Su archivo se interpreta como una secuencia de bytes de 8 bits .Salida de volcado hexadecimal
hexdump
produce un volcado hexadecimal tradicional, con una columna que enumera bytes de 8 bits en hexadecimal, y la otra muestra qué caracteres ASCII corresponden a estos bytes, si corresponde (si el valor del byte es un carácter ASCII no imprimible o no es un carácter ASCII) ,.
se muestra en esa posición). Nuevamente, su archivo se interpreta como una secuencia de bytes de 8 bits .Enteros
Si su archivo comprende 100% de enteros binarios (es decir, es una matriz unidimensional sin encabezado, uniforme, de algún tipo de representación de enteros), entonces debe responderse todas estas preguntas:
Probablemente hay más que estoy olvidando en este momento.
Y esto es solo para una matriz uniforme de enteros unidimensional, proveniente de una arquitectura de computadora moderna y común. Si sus datos tienen algún tipo de complejidad, las cosas se pondrán tan difíciles que rápidamente será más fácil ganar la lotería que simplemente adivinar el formato. Y tiene que adivinar (una suposición educada, pero una suposición), a menos que sepa el formato.
fuente