2017-04-04 2 views
1

Sagen wir, es gibt eine Variable in Bash-Skript mit Wert "001" Wie kann ich diese Binärdaten in eine Datei schreiben als Bits (wie "001" nicht "1") Echo schreibt es als String, aber ich möchte in Bits schreiben.Wie schreibe ich binäre Daten in Bash

+0

mischen Sie nicht in eine Datei einzelne Bits schreiben. Die kleinste Menge, die Sie schreiben können, ist 8 Bits, d. H. Ein Byte. –

+0

Wie schreibe ich 8 Bit String Variable sagen "00000011" in Datei –

+1

@JeevansaiJinne 'printf '% s' $ '\ x03'> Datei' – 123

Antwort

4

Sie können mit beliebigen Bytes in Hex oder Oktal schreiben:

printf '\x03' > file # Hex 
printf '\003' > file # Octal 

Wenn Sie binäre haben, es ist ein bisschen tricker, aber man kann es in Oktal drehen mit:

printf '%o\n' "$((2#00000011))" 

die von natürlich kann in dem oben verschachtelt werden:

binary=00000011 
printf "\\$(printf '%o' "$((2#$binary))")" > file 

Beachten Sie, dass dies nur mit bis zu 8 Bit arbeitet. Wenn Sie mehr Werte schreiben möchten, müssen Sie es aufgeteilt in Gruppen von 8

+0

Was ist der Unterschied zwischen Schreiben in Dezimal und Oktal schreiben beide Bytes –

+1

Das Ergebnis ist das gleiche, der Unterschied besteht nur darin, wie Sie das Byte angeben, das Sie schreiben möchten. Wenn du alle Einsen schreiben willst, ist es '\ xFF' vs' \ 377'. Sie können das verwenden, mit dem Sie arbeiten möchten. –

2

einfach die %b im printf:

printf "%b" "\012" 
printf "%b" "\x0a" 

% b - Druck das zugehörige Argument während der Interpretation Backslash entweicht dort

so, über die beiden Drucke Binärwert für das Dezimalsystem 10.

printf "%b" "\x0a" | od -bc 

Ausgang

0000000 012                
      \n  

können Sie sogar

printf "%b" "\12\xa\n" | od -bc 

0000000 012 012 012              
      \n \n \n