ASCII 到 EBCDIC 字符编码
ASCII to EBCDIC Character Incoding
将 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
如何实现?任何帮助将不胜感激。
谢谢
你可以这样转换字符串
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");
将 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
如何实现?任何帮助将不胜感激。
谢谢
你可以这样转换字符串
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");