GNU/Linux >> Znalost Linux >  >> Linux

Jak zapsat celé číslo do binárního souboru pomocí Bash?

To je to, co jsem mohl vymyslet:

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

Nyní v závislosti na endianness možná budete chtít prohodit pořadí bajtů:

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

Příklad (dekódovaný, takže je vidět):

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

Toto je pro nepodepsané int, pokud je int podepsán a hodnota je záporná musíte vypočítat komplement těchto dvou. Jednoduchá matematika.


K převodu číselné HODNOTY na odpovídající znak můžete použít následující funkci:

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

Hodnoty bajtů musíte převádět jednotlivě, po sobě ve správném pořadí (endianess) pro stroj/architekturu, kterou používáte. Takže si myslím, že nejlépe by fungovalo trochu použití jiného skriptovacího jazyka, který podporuje binární výstup.


Podívejte se, zda vám to funguje

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

Linux
  1. Jak zapíšu znaky jiné než ASCII pomocí echa?

  2. Jak zapíšu stderr do souboru při použití tee s potrubím?

  3. Jak nahradit mezery v názvech souborů pomocí bash skriptu

  1. Jak zapsat celé číslo do binárního souboru pomocí Bash?

  2. Jak připojit k souboru v C pomocí Otevřít v režimu O_APPEND na linuxu?

  3. Bash - Jak tisknout víceřádkové řetězce (s '\n') pomocí printf

  1. Jak napsat smyčku v Bash

  2. Jak extrahovat textovou část binárního souboru v linux/bash?

  3. Jak odstranit soubor bez použití rm?