Понимание преобразования байта в строку - PullRequest
0 голосов
/ 25 января 2012

Я заполнил код Хаффмана, который я скачал из интернета, но я не понял основной цели кода ниже.Я знаю, что это меняет байт на строковые литералы, но я не знаю как.Я был бы благодарен, если бы вы объяснили синтаксис для меня.

public static String to_String(Byte byt, int len) {
    String tmp = Integer.toBinaryString(byt);
    if (tmp.length() > 8) {
        tmp = tmp.substring(24);
    }
    while (tmp.length() < 8) {
        tmp = "0" + tmp;
    }

    return tmp.substring(8 - len);
}

1 Ответ

2 голосов
/ 25 января 2012

Коротко

В компьютерах байт составляет 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)

Надеюсь, это поможет

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