Давайте возьмем Byte.parseByte()
в качестве примера в качестве одного из оберток parseXXX()
.ParseXXX Wrapper для подписанного двоичного недоразумения
От parseByte(String s, int radix)'s JavaDoc
:
Анализирует строковый аргумент в качестве знакового байта в системе счисления, указанный второй аргумент.
Но это не совсем так, если radix = 2
. Другими словами, двоичный литерал -127
является 10000000
:
byte b = (byte) 0b10000000;
Так должно быть справедливо следующее:
byte b = Byte.parseByte("10000000", 2);
но, к сожалению, он бросает NumberFormatException
, и вместо этого я должен сделать это следующим образом:
byte b = Byte.parseByte("-111111", 2);
, где parseByte()
анализирует двоичную строку в качестве знака-величины (знака и величины), ш здесь он должен анализироваться как подписанный двоичный код (дополнение 2, то есть MSB является знаковым битом).
Я не прав?
Исследование: Вы посмотрели исходный код? – jlordo
@jlordo Нет, у меня еще нет. –
Сделайте это, вот как я понял всю эту проблему вчера перед публикацией [this] (http://stackoverflow.com/questions/14926920/java-long-parse-binary-string/14927505#14927505). – jlordo