преобразование символа UTF-8 в 7-битный ASCII с четным байтом четности в Java - PullRequest
0 голосов
/ 29 февраля 2012

Устройство, с которым я пытаюсь установить связь, принимает 7-битные символы ASCII с четной четностью. При попытке преобразовать символ 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 ]

1 голос
/ 29 февраля 2012

Вы получаете сообщение об ошибке, поскольку Byte.parseByte отказывается анализировать значения вне диапазона байтов (-128..127).Поэтому он отказывается анализировать что-то вроде "10001011", что составляет 139 в десятичном виде.Для быстрого исправления можно использовать Integer.parseInt вместо этого и привести результат к байту:

else return (byte) Integer.parseInt(("1"+s.substring(1)),2);

Я бы, однако, отступил бы и переделал все с помощью побитовой арифметики.

0 голосов
/ 29 февраля 2012

Чтобы установить один бит, достаточно сделать что-то вроде:

return (byte) (b | 0x80);
...