मेरे मूल जवाब गलत था - xxd
या तो स्वीकार नहीं कर सकते -p
या -r
के साथ -b
...
यह देखते हुए कि अन्य उत्तर व्यावहारिक हैं, और " दूसरे तरीके " के हित में, निम्नलिखित के बारे में कैसे:
इनपुट
$ cat instructions.txt
00000000000000000000000000010011
00000010110100010010000010000011
00000000011100110000001010110011
00000000011100110000010000110011
00000000011100110110010010110011
00000000000000000000000000010011
उत्पादन
$ hexdump -Cv < instructions.bin
00000000 00 00 00 13 02 d1 20 83 00 73 02 b3 00 73 04 33 |...... ..s...s.3|
00000010 00 73 64 b3 00 00 00 13 |.sd.....|
00000018
बैश पाइपलाइन:
cat instructions.txt \
| tr -d $'\n' \
| while read -N 4 nibble; do
printf '%x' "$((2#${nibble}))"; \
done \
| xxd -r -p \
> instructions.bin
cat
- अनावश्यक, लेकिन स्पष्टता के लिए उपयोग किया जाता है
tr -d $'\n'
- इनपुट से सभी newlines निकालें
read -N 4 nibble
- पढ़ वास्तव में 4 × पात्रों nibble
चर
printf '%x' "$((2#${nibble}))"
बाइनरी से 1 × हेक्स चरित्र में बड़प्पन को परिवर्तित करें
$((2#...))
- दिए गए मान को बेस 2 (बाइनरी) से बेस 10 (दशमलव) में बदलें
printf '%x'
- दिए गए मान को आधार 10 (दशमलव) से आधार 16 (हेक्साडेसिमल) में स्वरूपित करें
xxd -r -p
- रिवर्स ( -r
) एक सादे डंप ( -p
) - हेक्साडेसिमल से कच्चे बाइनरी तक
अजगर:
python << EOF > instructions.bin
d = '$(cat instructions.txt | tr -d $'\n')'
print(''.join([chr(int(d[i:i+8],2)) for i in range(0, len(d), 8)]))
EOF
- पाइथॉन
<< EOF
कोड में सामग्री प्राप्त करने के लिए एक अनअकॉटेड हेरेडोक ( ) का उपयोग किया जाता है
- यदि इनपुट बड़ा हो जाता है तो यह कुशल नहीं है
cat
और tr
- एक स्वच्छ (एक-पंक्ति) इनपुट प्राप्त करने के लिए उपयोग किया जाता है
range(0, len(d), 8)
- d
एक समय में 8 × वर्णों को बढ़ाते हुए, स्ट्रिंग के 0 से अंत तक की संख्या की सूची प्राप्त करें ।
chr(int(d[i:i+8],2))
- d[i:i+8]
बाइनरी से दशमलव ( int(..., 2)
), और फिर एक कच्चे चरित्र ( chr(...)
) के लिए वर्तमान टुकड़ा ( ) में परिवर्तित करें
[ x for y in z]
- सूची समझ
''.join(...)
- पात्रों की सूची को एक स्ट्रिंग में परिवर्तित करें
print(...)
- इसे छापो