Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将EBCDIC十六进制转换为二进制_Java_Binary_Hex_Ascii_Ebcdic - Fatal编程技术网

Java 如何将EBCDIC十六进制转换为二进制

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

//问题已解决

我写了一个程序将EBCDIC字符串转换成十六进制。 我对一些迹象有意见

所以,我把字符串读成字节,然后把它们改成十六进制(每两个符号)

问题是,JAVA根据十进制ASCII63转换十进制ASCII136符号

这是有问题和错误的,因为它是唯一错误的转换字符

//编辑-添加代码

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谢谢您的帮助