GNU/Linux >> Linux Esercitazione >  >> Linux

Come scrivere un numero intero in un file binario usando Bash?

Questo è quello che potrei inventare:

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

Ora, a seconda dell'endianità, potresti voler scambiare l'ordine dei byte:

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

Esempio (decodificato, quindi è visibile):

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

Questo è per unsigned int, se l'int è signed and il valore è negativo devi calcolare il complemento a due. Matematica semplice.


È possibile utilizzare la seguente funzione per convertire un VALORE numerico nel carattere corrispondente:

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

Devi convertire i valori dei byte singolarmente, uno dopo l'altro nell'ordine corretto (endianess) per la macchina/architettura che usi. Quindi immagino che un piccolo uso di un altro linguaggio di scripting che supporti l'output binario farebbe il lavoro migliore.


Vedi se funziona per te

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

Linux
  1. Come sostituire gli spazi nei nomi dei file usando uno script bash

  2. Come analizzare un file CSV in Bash?

  3. Come scrivere un numero intero in un file binario usando Bash?

  4. Come aggiungere al file in C, utilizzando Apri in modalità O_APPEND su Linux?

  5. Come estrarre la parte di testo di un file binario in linux/bash?

Come scrivere uno script Bash con esempi

Bash:Scrivi su file

Come leggere un file riga per riga in Bash

Come modificare automaticamente lo sfondo di GNOME a intervalli utilizzando BASH

Procedura:un'introduzione all'uso di Git

Tutorial Unix Sed:come scrivere su un file usando Sed