我完成了从互联网上下载的霍夫曼代码,但我不明白下面代码的主要目的。我知道它将字节更改为字符串文字,但我不知道如何。如果你能为我解释语法,我将感激不尽。
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);
}
答案 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)
希望这有帮助