আমার মূল উত্তর ভুল ছিল - 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'
- ইনপুট থেকে সমস্ত নিউলাইন সরান
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
- একটি unquoted heredoc (
<< EOF
) পাইথন কোডে বিষয়বস্তু পাওয়ার জন্য ব্যবহার করা হয়
- ইনপুট বড় হয়ে গেলে এটি দক্ষ নয়
cat
এবং tr
- একটি পরিষ্কার (এক-লাইন) ইনপুট পেতে ব্যবহৃত
range(0, len(d), 8)
- স্ট্রিংয়ের শেষে 0 থেকে এক d
বারে 8 × অক্ষরের পদক্ষেপের সংখ্যাগুলির তালিকা পান ।
chr(int(d[i:i+8],2))
- বর্তমান স্লাইস ( d[i:i+8]
) বাইনারি থেকে দশমিক ( int(..., 2)
) এবং তারপরে একটি কাঁচা অক্ষরে রূপান্তর করুন ( chr(...)
)
[ x for y in z]
- তালিকা বোঝা
''.join(...)
- অক্ষরের তালিকাটিকে একটি স্ট্রিংয়ে রূপান্তর করুন
print(...)
- এটা ছাপাও