了解Byte到String的转换

时间:2012-01-24 20:29:08

标签: java logic

我完成了从互联网上下载的霍夫曼代码,但我不明白下面代码的主要目的。我知道它将字节更改为字符串文字,但我不知道如何。如果你能为我解释语法,我将感激不尽。

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 个答案:

答案 0 :(得分:2)

不久

在计算机中,一个字节是8位。 在Java中,一个字节被签名,因此值介于-127和+127之间(而不是0到255)。

-------将字节读入字符串-------

String tmp = Integer.toBinaryString(byt);

这部分代码将Byte转换为String。当它是正值时,一切都是“逻辑的”。我的意思是字符串代表字节。即字节值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”的位。 Perhpas它与你的特定功能有关。

对我来说,如果目标只是将一个字节转换为一个8位(字符串)的字符串,我就会编写

return tmp;

并且还会在标题中删除“int len”

public static String to_String(Byte byt)

希望这有帮助