2011-04-07 22 views
13

मेरे समस्या मैं इस सटीक बाइट्स के साथ एक फ़ाइल बनाने की आवश्यकता है कि लेखन: 48, 00, 49, 00खोल में एक बाइनरी फ़ाइल (खोल, awk)

मैं सी (उपयोग नहीं कर सकते, क्योंकि मैं कुछ भी तैनात नहीं कर सकते ।, कोई पर्ल, कोई अन्य पटकथा भाषा मैं इस कोशिश की awk का उपयोग कर, और डेस्कटॉप में यह काम करता है:।

[email protected]:~# awk 'BEGIN{ printf "%c%c%c%c", 48, 00, 49, 00 }' | hexdump 
0000000 0030 0031        
0000004 

हालांकि लक्ष्य मंच बिजीबॉक्स v1.13.2 चल रहा है और इस कोड को वहाँ काम नहीं करता है awk संस्करण एएससीआई "0" आउटपुट नहीं करता है (सभी अन्य मान ठीक हैं)

आपका रीकॉम क्या है mendations?

उत्तर

20

आप निम्न आदेश का उपयोग कर सकते हैं:

echo -n -e \\x48\\x00\\x49\\x00 > myfile 
5

आप गूंजने का प्रयास कर सकते हैं, जो मनमाने ढंग से एसीसी वर्णों (उन संख्याओं को ऑक्टल संख्याएं भी) की अनुमति देता है।

echo -n -e \\0060\\0000\\0061\\0000 | hexdump 
+0

... और हेक्स में। ।? क्या यह संभव है? – elcuco

+0

नहीं, गूंज सिर्फ ऑक्टल संख्या स्वीकार करता है। लेकिन आपने एक विशिष्ट दिए गए हेक्स अनुक्रम के लिए कहा (और मैंने उन्हें आपके लिए ऑक्टेट में भी अनुवादित किया)। यदि आप अनिश्चित हैं कि एएससीआई के मैन पेज में एक अलग हेक्स अनुक्रम की रूपांतरित करने के तरीके को कैसे परिवर्तित किया जाए। यह आपको दशमलव, हेक्स और ऑक्टल संख्याओं के साथ एक टेबल देगा ;-)। – flolo

+0

सिर्फ भविष्य के संदर्भ के लिए यह हेक्स स्वीकार करता है। बस \\ xNN का उपयोग करें जहां एन एक हेक्स संख्या है। – Velocibadgery

1

मुझे नहीं पता कि व्यस्त बॉक्स में क्या है, लेकिन यह काम कर सकता है क्योंकि printf awk से छोटा है।

$ printf "%c%c%c%c" 48 0 49 0 | hexdump 

यह आउटपुट है:

$ printf "%c" 1 | hexdump 
0000000 0031      
+1

मैंने आपके उत्तर को जो देखा है उसके साथ संपादित किया, और यह मैंने नहीं पूछा। यह 0x31 प्रिंट करता है जो वर्ण "1" का ASCII मान है। – elcuco

+0

तो यदि आप एच और 1 के साथ 1 को प्रतिस्थापित करते हैं, तो आपको 0x48, 0x49 मान चाहिए जो आप चाहते हैं - दशमलव 48/49 (0 और 1 का उपयोग करके) के बजाय।समस्या को समाप्त करने के लिए समस्याग्रस्त भाग शून्य बाइट्स प्राप्त कर रहा है। उपरोक्त तब 'printf "% c% c% c% c में अनुवाद करता है" 72 0 73 0 | आउटपुट 0x48 0x00 0x49 0x00 के लिए हेक्सडम्प'। – starturtle

5

POSIX AWK मानक का कहना है कि% c प्रारूप के साथ एक 0 AWK के printf गुजर परिणाम कर सकते हैं अनिर्दिष्ट व्यवहार में। हालांकि ... POSIX echo भी बहुत सीमित है, और हालांकि ऑक्टल और हेक्साडेसिमल विनिर्देशक (और -n) जीएनयू गूंज और बीएएसएच पर अंतर्निहित काम करेंगे ... वे हर जगह काम नहीं कर सकते हैं। सभी पॉज़िक्स सिस्टम पर आपको लगातार व्यवहार करने का मौका अधिकतम करने के लिए, इनमें से किसी भी से शेल कमांड लाइन के प्रिंटफ का उपयोग करना बेहतर है।

$ printf '\060\000\061\000' | od -An -tx1 
30 00 31 00 

यह हालांकि मेरे लिए अजीब लग रहा है ... आप उत्पादन 0x48, 0x00, 0x49, 0x00 के लिए इच्छुक हो सकता है - जो अष्टाधारी में एक सुंदर पायलट नंबर की तरह दिखता है:

$ printf '\110\000\111\000' | od -An -tx1 
48 00 49 00 
3

मैं जरूरत पुराने एंड्रॉइड खोल में व्यस्त बॉक्स का उपयोग करके हेक्स से बाइनरी फाइलें लिखना। रीडायरेक्ट के साथ यह printf मेरे उपयोग मामले में काम करता है।

हेक्स में बाइनरी डेटा लिखें:

# busybox printf '\x74\x65\x73\x74' > /sdcard/test.txt 

प्रदर्शन हेक्स में परिणाम:

# busybox hexdump -C /sdcard/test.txt 
00000000 74 65 73 74          |test| 
00000004 

प्रदर्शन ascii में परिणाम:

# cat /sdcard/test.txt 
test 
+0

आपको 'dd' का उपयोग करने के लिए उपयोग करने की आवश्यकता क्यों है? 'Busybox printf 'क्यों नहीं होगा \ x74 \ x65 \ x73 \ x74'>/sdcard/test.txt' काम? –

+0

वाह आप सही हैं! मुझे यकीन था कि मैंने कोशिश की थी। मैंने इन सभी उत्तरों और एक दर्जन अन्य लोगों को आजमाया जो सभी असफल रहे। यह इतना आसान है। मिश्रण में कुछ अन्य चर होना चाहिए। मैं अपना जवाब संशोधित करूंगा। धन्यवाद! – BuvinJ