2012-03-14 19 views
5

मैं कच्चे यूटीएफ -8 स्ट्रिंग को हेक्स स्ट्रिंग में कनवर्ट करने में सक्षम होना चाहता हूं। नीचे दिए गए उदाहरण में मैंने एक नमूना यूटीएफ -8 स्ट्रिंग बनाया है जिसमें 2 अक्षर हैं। फिर मैं हेक्स मान प्राप्त करने की कोशिश कर रहा हूं लेकिन यह मुझे नकारात्मक मान देता है।जावा: एक स्ट्रिंग से यूटीएफ -8 हेक्स मान प्राप्त करें?

मैं इसे कैसे मुझे दे 05D0 और 05D1

String a = "\u05D0\u05D1"; 
byte[] xxx = a.getBytes("UTF-8"); 

for (byte x : xxx) { 
    System.out.println(Integer.toHexString(x)); 
} 

धन्यवाद कर सकते हैं।

उत्तर

5

यदि आप कोड बिंदु चाहते हैं तो यूटीएफ -8 जैसे एन्कोडिंग में कनवर्ट न करें। Character.codePointAt का प्रयोग करें।

उदाहरण के लिए:

Character.codePointAt("\u05D0\u05D1", 0) // returns 1488, or 0x5d0 
+1

ठीक है, क्या आप यूटीएफ -8 (0xD790) या कोड पॉइंट (0x000005D0) के हेक्स मान चाहते हैं? यदि आप कोड बिंदु चाहते हैं, तो बाइट को 'स्ट्रिंग (बाइट्स, "यूटीएफ -8") के साथ स्ट्रिंग में कनवर्ट करें और फिर हेक्स प्रस्तुति प्राप्त करने के लिए' Character.codePointAt (...)। ToHexString() 'का उपयोग करें। – ataylor

+0

शायद मुझे कुछ याद आ रहा है। 'Character.codePointAt' में' toHexString' विधि नहीं है, यह एक पूर्णांक देता है। क्या आप मुझे पूरा उदाहरण दे सकते हैं? धन्यवाद – thedp

+1

ओह, toHexString एक स्थिर विधि है। 'System.out.println (Integer.toHexString (Character.codePointAt (" \ u05D0 ", 0)))' '5d0' प्रिंट करेगा। यदि आप बाईं ओर शून्य के साथ पैड करना चाहते हैं, तो 'System.out.printf ("% 08x", Character.codePointAt ("\ u05D0", 0))' 'प्रिंट करें जो '000005d0' प्रिंट करता है। – ataylor

3

नकारात्मक मूल्यों पाए जाते हैं क्योंकि byte की सीमा -128 से 127 है निम्नलिखित कोड सकारात्मक मूल्यों का उत्पादन करेगा:

String a = "\u05D0\u05D1"; 
byte[] xxx = a.getBytes("UTF-8"); 

for (byte x : xxx) { 
    System.out.println(Integer.toHexString(x & 0xFF)); 
} 

मुख्य अंतर यह है कि यह सिर्फ x, इस आपरेशन धर्मान्तरित के बजाय x & 0xFF आउटपुट है byte से int, साइन छोड़ना।

+0

त्वरित उत्तर के लिए धन्यवाद, लेकिन यह अभी भी सही मान नहीं देता है। मैं 05 डी 0 के हेक्स मानों को पुन: पेश करने की कोशिश कर रहा हूं, कोड मुझे डी 7 90 – thedp

+0

@thedp देता है ऐसा इसलिए होता है क्योंकि आपके द्वारा एन्कोड किए गए प्रतीक इन बाइट्स द्वारा यूटीएफ -8 में दर्शाए जाते हैं। यदि आप बाइट्स प्राप्त करना चाहते हैं तो आपने कहा, आपको यूटीएफ -16 का उपयोग करना चाहिए। – Malcolm

+1

यूटीएफ -8 एन्कोडिंग ऐसा नहीं करता जो आपको लगता है कि मुझे संदेह है। प्रत्येक मान एकाधिक बाइट्स पर एन्कोड किया गया है। विवरण के लिए http://en.wikipedia.org/wiki/UTF-8# डिस्क्रिप्शन देखें। – sw1nn

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

  • कोई संबंधित समस्या नहीं^_^