Java 如何将EBCDIC十六进制转换为二进制
//问题已解决 我写了一个程序将EBCDIC字符串转换成十六进制。 我对一些迹象有意见 所以,我把字符串读成字节,然后把它们改成十六进制(每两个符号) 问题是,JAVA根据十进制ASCII63转换十进制ASCII136符号 这是有问题和错误的,因为它是唯一错误的转换字符 //编辑-添加代码Java 如何将EBCDIC十六进制转换为二进制,java,binary,hex,ascii,ebcdic,Java,Binary,Hex,Ascii,Ebcdic,//问题已解决 我写了一个程序将EBCDIC字符串转换成十六进制。 我对一些迹象有意见 所以,我把字符串读成字节,然后把它们改成十六进制(每两个符号) 问题是,JAVA根据十进制ASCII63转换十进制ASCII136符号 这是有问题和错误的,因为它是唯一错误的转换字符 //编辑-添加代码 int[] bytes = toByte(0, 8); String bitmap = hexToBin(toHex(bytes)); //ebytes[] - ebcdic string public
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');
}
int[]字节=toByte(0,8);
字符串位图=hexToBin(toHex(字节));
//ebytes[]-ebcdic字符串
公共整数[]字节(整数从,整数到){
int[]新字节=新的int[to-from+1];
int k=0;
对于(int i=from;i没有136的ASCII值,因为ASII只有7位-127之外的所有内容都是一些自定义扩展代码页(链接表似乎使用某种windows代码页,例如Cp1252)。由于它正在打印一个?
,因此您使用的代码页似乎没有为值136指定字符-例如,ISO-8859的某种味道。解决方案。
- 将Eclipse中的编码更改为更合适的编码(在我的示例ISO-8859-1中)
- 更改读取文件的方式
现在,我逐字节读取它并将其解析为char
在之前,它是一行接一行的,这就是我丢失一些字符的原因。那么我能用它做什么呢?顺便问一下,正如你看到的,我写了“十进制ASCII 136符号依据”。其中“依据”是一个关键字。@Shaq您能做什么取决于您现在正在做什么-我不知道。首先,我从文件中读取一个字符串,然后从中读取字节并转换为整数(因为我有负值)。接下来,我将每两个字节转换为十六进制。最后,我将十六进制转换为二进制。你能解释一下你想做什么并提供你的代码吗。如果你有一个“EBCDIC”字符串并想将其转换为十六进制,为什么你需要将其转换为ascii?我有一个EBCDIC十六进制,我想将其转换为二进制。我上面的描述可能会产生误导,很抱歉。在UltraEdit中,我打开EBCDIC文本并将视图更改为十六进制模式。这个十六进制我也需要在JAVA中获取。@BruceMartin谢谢您的帮助