如何将 EBCDIC 十六进制转换为二进制
How to convert EBCDIC hex to binary
//问题已解决
我编写了一个程序将 EBCDIC 字符串转换为十六进制。
我有一些迹象的问题。
所以,我将字符串读取为字节,然后将它们更改为十六进制(每两个符号)
问题是,JAVA根据https://shop.alterlinks.com/ascii-table/ascii-ebcdic-us.php将十进制ASCII 136符号转换为十进制ASCII 63 .
这是有问题和错误的,因为它是唯一错误的转换字符。
//编辑-添加代码
int[] bytes = toByte(0, 8);
String bitmap = hexToBin(toHex(bytes));
//ebytes[] - ebcdic string
public int[] toByte(int from, int to){
int[] newBytes = new int[to - from + 1];
int k = 0;
for(int i = from; i <= to; i++){
newBytes[k] = ebytes[i] & 0xff;
k++;
}
return newBytes;
}
public String toHex(int[] hex){
StringBuilder sb = new StringBuilder();
for (int b : hex) {
if(Integer.toHexString(b).length() == 1){
sb.append("0" + Integer.toHexString(b));
}else{
sb.append(Integer.toHexString(b));
}
}
return sb.toString();
}
public String hexToBin(String hex){
String toReturn = new BigInteger(hex, 16).toString(2);
return String.format("%" + (hex.length() * 4) + "s", toReturn).replace(' ', '0');
}
//edit2
将 Eclipse 中的编码更改为 ISO-8859-1 有所帮助,但我在从文件中读取文本时丢失了一些符号。
//edit3
问题已通过更改读取文件的方式解决。
现在,我逐字节读取它并将其解析为字符。
之前是一行一行的。
没有 136 的 ASCII 值,因为 ASII 只有 7 位 - 超过 127 的所有内容都是一些自定义扩展代码页(链接的 table 似乎使用某种 windows-代码页,例如 Cp1252)。由于它正在打印 ?
,因此您似乎使用的代码页没有分配给值 136 的字符 - 例如有点 ISO-8859 的味道。
解决方案。
- 将 Eclipse 中的编码更改为更合适的编码(在我的示例中为 ISO-8859-1)。
- 更改读取文件的方式。
现在,我一个字节一个字节的读取,解析成char。
在之前,它是一行一行的,这就是我丢失一些字符的方式。
//问题已解决
我编写了一个程序将 EBCDIC 字符串转换为十六进制。 我有一些迹象的问题。
所以,我将字符串读取为字节,然后将它们更改为十六进制(每两个符号)
问题是,JAVA根据https://shop.alterlinks.com/ascii-table/ascii-ebcdic-us.php将十进制ASCII 136符号转换为十进制ASCII 63 .
这是有问题和错误的,因为它是唯一错误的转换字符。
//编辑-添加代码
int[] bytes = toByte(0, 8);
String bitmap = hexToBin(toHex(bytes));
//ebytes[] - ebcdic string
public int[] toByte(int from, int to){
int[] newBytes = new int[to - from + 1];
int k = 0;
for(int i = from; i <= to; i++){
newBytes[k] = ebytes[i] & 0xff;
k++;
}
return newBytes;
}
public String toHex(int[] hex){
StringBuilder sb = new StringBuilder();
for (int b : hex) {
if(Integer.toHexString(b).length() == 1){
sb.append("0" + Integer.toHexString(b));
}else{
sb.append(Integer.toHexString(b));
}
}
return sb.toString();
}
public String hexToBin(String hex){
String toReturn = new BigInteger(hex, 16).toString(2);
return String.format("%" + (hex.length() * 4) + "s", toReturn).replace(' ', '0');
}
//edit2
将 Eclipse 中的编码更改为 ISO-8859-1 有所帮助,但我在从文件中读取文本时丢失了一些符号。
//edit3
问题已通过更改读取文件的方式解决。
现在,我逐字节读取它并将其解析为字符。 之前是一行一行的。
没有 136 的 ASCII 值,因为 ASII 只有 7 位 - 超过 127 的所有内容都是一些自定义扩展代码页(链接的 table 似乎使用某种 windows-代码页,例如 Cp1252)。由于它正在打印 ?
,因此您似乎使用的代码页没有分配给值 136 的字符 - 例如有点 ISO-8859 的味道。
解决方案。
- 将 Eclipse 中的编码更改为更合适的编码(在我的示例中为 ISO-8859-1)。
- 更改读取文件的方式。
现在,我一个字节一个字节的读取,解析成char。
在之前,它是一行一行的,这就是我丢失一些字符的方式。