Arp*_*wal 3 java hex ascii character-encoding ebcdic
将 ASCII 字符串转换为 EBCDIC 时:
\n\nSystem.out.println(new String("0810C2200000820000000400000000000000052852304131419391011590620022300270".getBytes("UTF-8"), "CP1047"));\nRun Code Online (Sandbox Code Playgroud)\n\n我得到以下输出字符串:
\n\n\xc3\xa4??????\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我想要的是:
\n\nF0 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\nRun Code Online (Sandbox Code Playgroud)\n\n我怎样才能实现它?任何帮助将不胜感激。
\n\n谢谢
\n您可以这样转换字符串
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]);
}
Run Code Online (Sandbox Code Playgroud)
但你的例子似乎是错误的。
以下是正确的,输入字符串中的一个字符被转换为相关的 EBCDIC 代码
0 F0
8 F8
1 F1
0 F0
Run Code Online (Sandbox Code Playgroud)
这里您的示例是错误的,因为您的示例将C2和20视为输入字符串中的两个字符,但不视为 EBCDIC 代码中的两个字符
C C3
2 F2
2 F2
0 F0
Run Code Online (Sandbox Code Playgroud)
对于另一个方向的转换,你可以这样做
// 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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5801 次 |
| 最近记录: |