在Java中使用偶数奇偶校验字节将UTF-8字符转换为ASCII 7位

时间:2012-02-29 15:14:42

标签: java byte bits

我尝试与之通信的设备采用偶数奇偶校验的ASCII 7位字符。在尝试转换UTF-8字符时,我将其转换为整数,然后转换为二进制字符串。检查字符串,然后根据需要设置奇偶校验位。

然而,当使用Byte.parseByte将其转换回来时,如果设置了有符号位,则会得到NumberFormatError。我怎么能绕过这个?

public byte addParity(byte b){
    int a = (int)b;
    int c = 0;
    String s = Integer.toBinaryString(a);
    for(int i=0; i!=(8-s.length());)
    {
        s = "0" +s;
    }

    for(int i=0; i<s.length(); i++){

        if(s.substring(i, i+1).equals("1"))c++;
    }
    if(c%2==0)return b;
    else return Byte.parseByte(("1"+s.substring(1)),2);         

}

2 个答案:

答案 0 :(得分:1)

您收到错误是因为Byte.parseByte拒绝解析超出字节范围的值(-128..127)。所以它拒绝解析像"10001011"这样的小数为139的东西。快速修复可以使用Integer.parseInt代替并将结果转换为byte:

else return (byte) Integer.parseInt(("1"+s.substring(1)),2);
然而,我会退后一步,用逐位算术重做整个事情。

答案 1 :(得分:0)

要设置一位,应该足以执行以下操作:

return (byte) (b | 0x80);