यदि आपके पास है xxd
, तो यह आसान है: यह हेक्साडेसिमल से और में परिवर्तित हो सकता है।
echo '0006303030304e43' | xxd -r -p | nc -l localhost 8181
मुझे नहीं लगता कि हेक्साडेसिमल को केवल पोसिक्स टूल्स का उपयोग करके बाइनरी में परिवर्तित करने का एक उचित (और उचित रूप से तेज़) तरीका है। यह पर्ल में काफी आसान किया जा सकता है। निम्न स्क्रिप्ट हेक्साडेसिमल को बाइनरी में परिवर्तित करता है, किसी भी इनपुट चरित्र को अनदेखा करता है जो हेक्साडेसिमल अंक नहीं है। यदि इनपुट लाइन में हेक्साडेसिमल अंकों की एक विषम संख्या है, तो यह शिकायत करता है।
#!/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 (उदाहरण के लिए एक एम्बेडेड डिवाइस पर) से चिपके रहने की आवश्यकता है, तो मैं हेक्साडेसिमल के बजाय बेस 64 का उपयोग करने की सलाह देता हूं । आप बेस 64 को डीकोड करने के लिए यूडोस्कोप का उपयोग कर सकते हैं । इनपुट में uuencode द्वारा निर्मित हेडर फॉर्मेट और एंड लाइन होनी चाहिए , यह कच्चा Base64 नहीं हो सकता है।
uudecode <<EOF | nc -l localhost 8181
begin-base64 644 -
AAYwMDAwTkM=
====
EOF