这主要是因为字节是用Java签名的。如果将一个字节提升为int,则它将标记extend,这意味着
0xf2
会变成
0xfffffff2
-14
在二的补码符号中。如果你反而变宽了
0xf2型
0x000000f2
,可能是
242
,可能
你想要什么。
所以
&
这个
|
接下来的操作将强制所有高位为1,这样您就可以从
ffffff00
ffffffff
包括(自
toHexString
7
进入之内
"7"
而不是
"07"
这个
substring(6)
然后应用,以便只得到这八个十六进制数字中的最后两个。
String.format ("%02x", s[i])
. 但是,这个特定的代码片段可能早于Java5
String.format
被介绍了。
如果运行以下程序:
public class testprog {
public static void compare (String s1, String s2) {
if (!s1.equals(s2))
System.out.println ("Different: " + s1 + " " + s2);
}
public static void main(String args[]) {
byte b = -128;
while (b < 127) {
compare (
Integer.toHexString((0x000000ff & b) | 0xffffff00).substring(6),
String.format("%02x", b, args));
b++;
}
compare (
Integer.toHexString((0x000000ff & b) | 0xffffff00).substring(6),
String.format("%02x", b, args));
System.out.println ("Done");
}
}
你会看到这两个表达式是一样的-它只是吐出来
Done