2011-12-31 19 views
5

स्ट्रिंग सरणी के स्ट्रिंग के सरणी को कनवर्ट करें मेरे पास स्ट्रिंग सरणी है, प्रत्येक सरणी तत्व एक हेक्सस्ट्रिंग है जिसमें 2 वर्ण होते हैं।बाइट्स

उदाहरण के लिए सरणी हो सकता है:

String a = {"aa","ff","00",.....} 

मैं कैसे जावा में बाइट्स की एक सरणी के लिए तार के इस सरणी में बदल सकते हैं?

+2

मुझे लगता है कि आपकी सबसे अच्छी शर्त स्ट्रिंग सरणी के समान आकार की बाइट सरणी बनाना है, लूप के लिए उपयोग करें, और लूप कॉल 'myBytes [i] = Byte.parseByte (myStrings [i], 16 के अंदर) 'प्रत्येक स्ट्रिंग आइटम को बाइट में पार्स करने के लिए (** संपादित करें: ** ओह, रेडिक्स भूल गए!)। –

+0

http://stackoverflow.com/questions/5425830/convert-the-hexadecimal-string-representation-of-some-bytes-into-a-byte-array-in इस लिंक, इसके लगभग एक ही सवाल – dantuch

+0

@HovercraftFullOfEels का उपयोग - आपको इसे एक उत्तर के रूप में पोस्ट करना चाहिए था। – ziesemer

उत्तर

0

यदि मैं सही ढंग से समझता हूं, तो आपको समेकित तारों के बाइट प्रतिनिधित्व की आवश्यकता है? की तरह कुछ:

public byte[] getBytes(String[] array) { 
    StringBuilder builder = new StringBuilder(); 
    for(String s: array) { 
     builder.append(s); 
    } 
    return builder.toString().getBytes(); 
} 
+2

फिर, पार्स बाइट्स नहीं। 'getBytes()' व्यक्तिगत बाइट्स को उनके बाइट प्रतिनिधित्व में पार्स नहीं करता है बल्कि प्रत्येक चार की अलग-अलग वर्णमाला एन्कोडिंग का उपयोग करता है - दो बहुत ही अलग चीजें। आप यह जवाब हटाना चाहेंगे। –

4

आप अहस्ताक्षरित बाइट हेक्स-तार पार्स करने के लिए चाहते हैं, का उपयोग

byte[] b = new byte[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = (byte) Short.parseShort(a[i], 16); 
} 

"एफएफ" -1 के लिए, प्रति two's compliment के रूप में पार्स किया जाएगा।

आप "एफएफ" 255 पार्स करने के लिए (एक जावा बाइट की तुलना में अधिक हो सकते हैं) आप शॉर्ट्स

short[] b = new short[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = Short.parseShort(a[i], 16); 
} 
+0

हाँ, यही वह है जिसके बारे में मैं बात कर रहा हूं। 1+ –

+0

हां, लेकिन स्ट्रिंग है जब स्ट्रिंग एफएफ धागे "मुख्य" java.lang में अपवाद। नम्बरफॉर्मैट अपवाद: इनपुट स्ट्रिंग के लिए: "एफएफ" – user1077980

+0

@ user1077980: त्रुटि तुम्हारा है, हारून नहीं। आपकी त्रुटि एफएफ पार्स करने की कोशिश कर रही है। बाइट का अधिकतम 7 एफ है। इसके बजाय int में पार्सिंग का प्रयास करें।** संपादित करें: ** या जेबी निजेट की उत्कृष्ट सिफारिश का प्रयोग करें! –

0

उपयोग करने के लिए आप ByteArrayOutputStream पर एक नज़र रखना चाहिए की आवश्यकता होगी चाहते हैं।

फिर आप प्रत्येक स्ट्रिंग आप के माध्यम से पुनरावृति और Byte.parseByte() विधि का उपयोग कर सकते हैं। write विधि का उपयोग करके आप इसे ByteArrayOutputStream में जोड़ सकते हैं।

एक बार जब आप सभी स्ट्रिंग्स को परिवर्तित कर लेंगे, तो आप ByteArrayOutputStream की toByteArray() विधि का उपयोग कर सकते हैं।

+0

ByteArrayOutputStream काम करेगा, लेकिन यहाँ एक छोटा सा overkill है। इसके अलावा Byte.parseByte() "एफएफ" पर चकित होगा –

3

सरणी के माध्यम से लूप, और एक बाइट के लिए प्रत्येक स्ट्रिंग परिवर्तित

byte b = (byte) (Integer.parseInt(theHexaString, 16)); 

Byte.parseByte() का उपयोग कर बाइट्स केवल हस्ताक्षर किए पार्स करता है, और एक संकेत है बिट के रूप में हस्ताक्षर सा विचार नहीं करता।

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