Коротко
В компьютерах байт составляет 8 бит.В Java байт подписан, поэтому значения находятся в диапазоне от -127 до +127 (а не от 0 до 255).
------- Чтение байта в строку -------
String tmp = Integer.toBinaryString(byt);
Эта часть вашего кода преобразует байт в строку.Когда это положительное значение, все «логично».Я имею в виду строка представляет байт.т.е. значение байта 10 -> 1010.
------- Обработка отрицательных значений -------
Что происходит с отрицательным значением?
Следующий код обрабатывает отрицательное значение.
if (tmp.length() > 8) {
tmp = tmp.substring(24);
}
.toBinaryString вернет 32-битную (char) строку в случае отрицательных значений 11111111111111111111111111110110, но так как вам нужен только байт (8 бит), теперь tmp принимаеттолько последние 8 значений..substring (24).Он присваивает значение, начинающееся с 24-го по конец (32-я позиция).
В нашем случае (-10) tmp становится 11110110
Примечание: кстати, я спрашиваю себя,на 64-битной JVM возвращаемым значением будет 64-битная строка (char).
------- Запись 8-символьной строки -------
Следующая часть вашего кода просто гарантирует, что байт действительно представлен строкой из 8 символов.
while (tmp.length() < 8) {
tmp = "0" + tmp;
}
В случае значения 10 строка, заданная .toBinaryString, равна 1010. Но правильныйпредставление равно 00001010, поэтому вы добавляете «0», пока не достигнете длины 8.
------- возвращение строки -------
return tmp.substring(8 - len);
Лично я не понимаю эту строчку.Эта строка сокращает результат, чтобы дать только биты, соответствующие "len".Возможно, это как-то связано с вашей конкретной функцией.
Для меня, если цель состоит в том, чтобы просто преобразовать байт в 8-битовую (char) строку, я бы просто написал:
return tmp;
и в заголовке также будет удалено "int len"
public static String to_String(Byte byt)
Надеюсь, это поможет