En shell, ¿cómo puedo leer los bytes de un archivo binario que tengo e imprimir la salida como números hexadecimales?
                    
                        shell
                                text-processing
                                binary
                                
                    
                    
                        Tom Brito
fuente
                
                fuente

Respuestas:
Utilizar
hexdump(1)...
fuente
od. También hay un editor hexadecimal de estilo vi llamadohexer.hexdump -e '"\\\x" /1 "%02x"' filename10, que es 16 en hexadecimal. La representación de dos bytes depende de la endianidad del sistema. Escribaman hexdumppara los detalles completos.Otra opción es od :
o
odtiene muchas opciones para un ajuste fino.fuente
od -t x1como formato preferido, supongo.od -t testque obtuveod: invalid character 't' in type string 'test'--tod --version od (GNU coreutils) 7.4Mientras estamos en
odyhexdump, dos herramientas más similares:Salida de muestra:
O, si desea leer los bytes de uno en uno e imprimirlos en su propio formato, intente algo como:
Salida de muestra:
fuente
whilebucle no funciona para la barra diagonal inversa y los caracteres de nueva línea (y en bash (a diferencia de ksh93) para los caracteres en blanco), ni funcionará correctamente en utf8 locales para bytes con el octavo bit establecido. Además, no necesita "od" allí, puede usarprintf '%02x\n' "'$byte"offsetes simplemente una especie de "variable ficticia"; No tiene uso práctico. Solo se usa como marcador de posición para llegarhex. Esto es lo que a veces afecta la legibilidad de manera negativa conread: variables que salen de la nada.$offsetestá limitado por la subshell, por lo que no lo veo como un problema.Mis dos centavos:
Me gusta esto porque estás siguiendo un archivo de almacenamiento en búfer actual mientras puedes ver el hexdump en vivo. No olvide que TODO en Unix es un archivo y podemos encadenar fácilmente comandos como
tailyhexdumppara resolver una amplia variedad de problemas.fuente
for((i=0;i<100;i++));do echo $i >>tst2.bin;sleep 1;done&él funciona bien para monitorear thx :)El comandante de medianoche es otra opción. No sé si está disponible para todos los sabores de Unix. Es posible que deba descargarlo primero.
F3 F4para ver en editor interno / en modo hexadecimal.
fuente
Uso od con c y x1, cuando necesito buscar texto dentro del archivo binario:
fuente