byte.parse () не любит 8 бит - PullRequest
       4

byte.parse () не любит 8 бит

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

Этот код

byte b = Byte.parseByte("10000000", 2);

вызывает исключение в Java.Это должно быть -128 или 255.

Байт имеет 8 бит.Почему я не могу разобрать 8-битную строку?

Ответы [ 5 ]

5 голосов
/ 09 февраля 2012

Причина кроется в диапазоне byte в Java.Байты подписаны , так что вы можете иметь что угодно от -128 ("-10000000") до 127 ("1111111"), но нет значений вне этого диапазона.

2 голосов
/ 09 февраля 2012

То, что вы можете сделать, обрабатывает значение как подписанное таким образом.

byte b = (byte) Integer.parseInt("10000000", 2);
2 голосов
/ 09 февраля 2012

MAX_VALUE байта в java (или в C #) равно 127, где 10000000 возвращает 128, которое не может быть сохранено в байтовой переменной

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

Строго говоря, вы передали не восемь битов в метод parse, а строковое представление обычного числа с основанием 2. И оно может содержать символ знака.В частности, byte b = Byte.parseByte("-10000000", 2) хорошо работает и дает -128.

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

Это не 8-битная строка, это 8-символьная строка, и она не читается так, как вы думаете ...

Из документации MSDN ( здесь ), вы увидите, что byte.Parse принимает строки в целочисленном формате.Итак, вы пытаетесь разобрать 10 миллионов, а не -1.Исключение, которое вы получаете, дает это: вы должны увидеть, что OverflowException.

byte.parse("255") дает ожидаемый эффект (byte без знака; использование -128 также дает переполнение).*

...