ถ้าคุณมีxxd
มันเป็นเรื่องง่าย: มันสามารถแปลงเป็นและจากฐานสิบหก
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
ฉันไม่คิดว่ามีวิธีที่เหมาะสม (และรวดเร็วพอสมควร) ในการแปลงเลขฐานสิบหกให้เป็นไบนารีโดยใช้เครื่องมือ POSIX เท่านั้น มันสามารถทำได้ค่อนข้างง่ายใน Perl สคริปต์ต่อไปนี้แปลงเลขฐานสิบหกเป็นไบนารีโดยไม่สนใจอักขระอินพุตใด ๆ ที่ไม่ใช่ตัวเลขฐานสิบหก มันบ่นว่าสายเข้ามีจำนวนเลขฐานสิบหกคี่
#!/usr/bin/env perl
$^W = 1;
$c = undef;
while (<>) {
tr/0-9A-Fa-f//cd;
if (defined $c) { warn "Consuming $c"; $_ = $c . $_; $c = undef; }
if (length($_) & 1) { s/(.)$//; $c = $1; }
print pack "H*", $_;
}
if (!eof) { die "$!"; }
if (defined $c) { warn "Odd number of hexadecimal digits"; }
หากคุณต้องการติด POSIX จริงๆ (เช่นบนอุปกรณ์ที่ฝังตัว) ฉันแนะนำให้ใช้Base64แทนเลขฐานสิบหก คุณสามารถใช้uudecodeเพื่อถอดรหัส Base64 อินพุตต้องมีรูปแบบส่วนหัวและบรรทัดสุดท้ายที่สร้างโดยuuencodeซึ่งไม่สามารถเป็น Base64 แบบดิบได้
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF