GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo escribir un entero en un archivo binario usando Bash?

Esto es lo que se me ocurrió:

int=65534
printf "0: %.8x" $int | xxd -r -g0 >>file

Ahora, dependiendo del endianismo, es posible que desee cambiar el orden de los bytes:

printf "0: %.8x" $int | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 >>file

Ejemplo (descodificado, por lo que es visible):

printf "0: %.8x" 65534 | sed -E 's/0: (..)(..)(..)(..)/0: \4\3\2\1/' | xxd -r -g0 | xxd
0000000: feff 0000                                ....

Esto es para sin firmar int, si el int está firmado y el valor es negativo tienes que calcular el complemento a dos. Matemáticas simples.


Puede usar la siguiente función para convertir un VALOR numérico en su carácter correspondiente:

chr() {
  printf \\$(printf '%03o' $1)
}

Debe convertir los valores de bytes individualmente, uno tras otro en el orden correcto (endianess) para la máquina/arquitectura que utiliza. Así que supongo que un poco de uso de otro lenguaje de secuencias de comandos que admita salida binaria haría el mejor trabajo.


Mira si esto funciona para ti

perl -e "print pack('L',`stat -c %s in.txt`)">>out.bin 

Linux
  1. Cómo escribir un bucle en Bash

  2. ¿Cómo escribo caracteres que no son ASCII usando echo?

  3. ¿Cómo escribo stderr en un archivo mientras uso tee con una tubería?

  4. Cómo reemplazar espacios en nombres de archivos usando un script bash

  5. ¿Cómo analizar un archivo CSV en Bash?

Cómo escribir un script Bash con ejemplos

Bash:escribir en archivo

Cómo leer un archivo línea por línea en Bash

Cómo cambiar automáticamente el fondo de GNOME en intervalos usando BASH

Cómo:una introducción al uso de Git

Tutorial de Unix Sed:Cómo escribir en un archivo usando Sed