2010-04-10 4 views
146

मैं अनमोडिफाइड बैक्स का उपयोग करके लिनक्स में एक बाइनरी फ़ाइल के हेक्स डंप कैसे बना सकता हूं? od और hexdump दोनों डंप में रिक्त स्थान दोनों को आदेश देता है और यह आदर्श नहीं है।फ़ाइल के हेक्स डंप को कैसे बनाया जाए जिसमें केवल हेक्स वर्ण हैं जिनमें बिना किसी स्पेस के बाक्स हैं?

क्या आउटपुट में सभी हेक्स वर्ण, माइनस रिक्त स्थान या न्यूलाइन के साथ बस एक लंबी स्ट्रिंग लिखने का कोई तरीका है?

+0

यह भी देखें: [लाइन नंबर या ASCII तालिका के बिना हेक्सडंप से केवल हेक्स मानों को मुद्रित करने के लिए कैसे?] (Https://stackoverflow.com/questions/15553493/how-to -प्रिंट-केवल-द-हेक्स-मान-से-हेक्सडम्प-बिना-लाइन-संख्या-या-ascii-tabl) – 0x90

उत्तर

19

ऐसा लगता है कि यह od के संस्करण के विवरण पर निर्भर करता है।

od -t x1 -An file |tr -d '\n ' 

(।। यही कारण है कि, के रूप में प्रकार हेक्स बाइट्स प्रिंट करने का कोई भी पते के साथ और रिक्त स्थान को निश्चित रूप से बाद में नष्ट कर दिया,)

+1

अभी तक एकमात्र POSIX विकल्प है। कहीं भी काम करना चाहिए। –

199

xxd -p file

या आप यह सब पर चाहते हैं: पर OSX, इस का उपयोग एक पंक्ति:

xxd -p file | tr -d '\n'

+9

fyi प्रक्रिया को उलट करने के लिए: xxd -r -ps hexascii.txt फ़ाइल (यह न्यूलाइन के साथ या बिना ठीक है) –

8

पर्ल एक लाइनर:

+०१२३५१६४१०
perl -e 'local $/; print unpack "H*", <>' file 
+0

सत्यापित। "Xxd -p फ़ाइल | tr -d '\ n'" से मेल खाता है। –

+1

fyi प्रक्रिया को उलट करने के लिए: perl -e 'स्थानीय $ /; प्रिंट पैक "एच *", <> ' फ़ाइल –

+0

"स्थानीय $ /" अनावश्यक है। –

62

स्वरूप तार (कोई खाली स्थान के बिल्कुल, बाइट बाइट द्वारा) करने के लिए व्यवहार करते हैं hexdump आप यह चाहते बिल्कुल के रूप में कर सकते हैं:

hexdump -ve '1/1 "%.2x"' 

1/1 का अर्थ है "प्रत्येक प्रारूप एक बार लागू किया जाता है और एक बाइट लेता है", और "%.2x" वास्तविक प्रारूप स्ट्रिंग है, जैसे printf में। इस मामले में: 2-वर्ण हेक्साडेसिमल संख्या, छोटे शून्य होने पर अग्रणी शून्य।

+7

आपको एक' -v' की आवश्यकता है या यह दोहराए गए बाइट्स को छोड़ देगा और उन्हें तारांकन से बदल देगा। –

+0

हाँ, यह सही है, मुझे याद आया। –

+1

मुझे आश्चर्य है कि हेक्सडम्प स्वयं आउटपुट के अंत तक नई लाइन (केवल) को जोड़ने में सक्षम है .. ('echo' का स्पष्ट परिशिष्ट बैश उपनाम के रूप में उपयोग करना असंभव बनाता है) – mykhal

2

अन्य उत्तरों बेहतर हैं, लेकिन शुद्ध बैश समाधान के लिए, मैंने my answer here में स्क्रिप्ट को संशोधित किया है ताकि फ़ाइल की सामग्री का प्रतिनिधित्व करने वाले हेक्स वर्णों की निरंतर स्ट्रीम आउटपुट हो सके। (इसका सामान्य तरीका hexdump -C अनुकरण करना है।)

संबंधित मुद्दे