Ошибка Java Byte.parseByte () - PullRequest
       33

Ошибка Java Byte.parseByte ()

7 голосов
/ 09 августа 2011

У меня небольшая ошибка в коде, которую я не могу понять на всю жизнь.

У меня есть массив строк, представляющих двоичные данные (после преобразования их из шестнадцатеричных данных), например: один индекс равен 1011, а другой - 11100. Я перебираю массив и дополняю каждый индекс нулями, чтобы каждый индекс составлял восемь байтов. Когда я пытаюсь преобразовать эти представления в реальные байты, я получаю сообщение об ошибке, когда пытаюсь проанализировать '11111111'. Я получаю следующее сообщение:

java.lang.NumberFormatException: Value out of range. Value:"11111111" Radix:2

Вот фрагмент:

String source = a.get("image block");
int val;
byte imageData[] = new byte[source.length()/2];

try {
    f.createNewFile();
    FileOutputStream output = new FileOutputStream(f);
    for (int i=0; i<source.length(); i+=2) {
        val = Integer.parseInt(source.substring(i, i+2), 16);
        String temp = Integer.toBinaryString(val);
        while (temp.length() != 8) {
            temp = "0" + temp;
        }
    imageData[i/2] = Byte.parseByte(temp, 2);
}

Ответы [ 3 ]

20 голосов
/ 09 августа 2011

Не проблема ли здесь в том, что byte является типом со знаком, поэтому его допустимые значения -128 ... 127? Если вы анализируете его как int (используя Integer.parseInt()), он должен работать.

Кстати, вам также не нужно дополнять число нулями.

После того, как вы проанализировали вашу двоичную строку в int, вы можете привести ее к байту, но значение все равно будет считаться подписанным, поэтому binary 11111111 сначала станет int 255, а затем byte -1 после приведения.

1 голос
/ 09 августа 2011

byte разрешают только числа в диапазоне от -128 до 127. Я бы вместо этого использовал int, который содержит числа в диапазоне от -2,1 до 2,1 миллиарда.

1 голос
/ 09 августа 2011

Ну, восемь один - это 255, и, согласно java.lang.Byte, MAX_VALUE - это 2 ^ 7 - 1 или положительное значение 127.

Таким образом, ваш код потерпит неудачу из-за слишком большого числа.Первый бит зарезервирован для положительного и отрицательного знака.

в соответствии с parseByte

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...