/ / ASCII से EBCDIC कैरेक्टर इनकोडिंग - जावा, कैरेक्टर-एन्कोडिंग, हेक्स, एससीआई, इबेडिक

एएससीआईआईआई ईबीसीडीआईसी कैरेक्टर इंकोडिंग - जावा, कैरेक्टर-एन्कोडिंग, हेक्स, एएससीआई, ईबीसीडीआईसी

ASCII स्ट्रिंग को EBCDIC में परिवर्तित करते समय:

System.out.println(new String("0810C2200000820000000400000000000000052852304131419391011590620022300270".getBytes("utf-8"), "CP1047"));

मुझे आउटपुट स्ट्रिंग के रूप में नीचे मिल रहा है:

ä??????

लेकिन, मैं जो चाहता हूं वह है:

F0 F8    F1 F0    C2 20    00 00    82 00    00 00    04 00  00 00    00 00    00 00   F4 F1    F0 F1    F1 F5  F9 F0    F6 F2    F0 F0    F2 F2    F3 F0    F0 F2    F7 F0

मैं इसे कैसे प्राप्त कर सकता हूं? किसी भी तरह की सहायता को आभार समझेंगे।

धन्यवाद

उत्तर:

जवाब के लिए 3 № 1

आप स्ट्रिंग को इस तरह बदल सकते हैं

String string = "0810C220";
byte[] bytes = string.getBytes("CP1047");
for (int i = 0; i < bytes.length; i++) {
System.out.printf("%s %X%n", string.charAt(i), bytes[i]);
}

लेकिन आपका उदाहरण गलत लगता है।

निम्नलिखित सही हैं, इनपुट स्ट्रिंग से एक वर्ण संबंधित EBCDIC कोड में बदल दिया गया है

0 F0
8 F8
1 F1
0 F0

यहाँ आपका उदाहरण गलत है, क्योंकि आपका उदाहरण व्यवहार करता है C2 तथा 20 इनपुट स्ट्रिंग में दो अक्षर के रूप में लेकिन EBCDIC कोड में दो अक्षर नहीं हैं

C C3
2 F2
2 F2
0 F0

दूसरी दिशा में रूपांतरण के लिए आप इसे इस तरह से कर सकते हैं

// string with hexadecimal EBCDIC codes
String sb = "F0F8F1F0";
int countOfHexValues = sb.length() / 2;
byte[] bytes = new byte[countOfHexValues];
for(int i = 0; i < countOfHexValues; i++) {
int hexValueIndex = i * 2;
// take one hexadecimal string value
String hexValue = sb.substring(hexValueIndex, hexValueIndex + 2);
// convert it to a byte
bytes[i] = (byte) (Integer.parseInt(hexValue, 16) & 0xFF);
}
// constructs a String by decoding bytes as EBCDIC
String string = new String(bytes, "CP1047");