Java 使用字节掩码防止符号扩展

Java 使用字节掩码防止符号扩展,java,networking,bytearray,endianness,Java,Networking,Bytearray,Endianness,我一直在读《Java中的TCP/IP套接字》,第二版。我希望能在某些方面做得更清楚一些,但由于这本书的网站没有论坛或其他什么,我想我应该在这里问一下。 在一些地方,本书使用字节掩码来避免符号扩展。下面是一个例子: private final static int BYTEMASK = 0xFF; //8 bits public static long decodeIntBigEndian(byte[] val, int offset, int size) { long rtn = 0;

我一直在读《Java中的TCP/IP套接字》,第二版。我希望能在某些方面做得更清楚一些,但由于这本书的网站没有论坛或其他什么,我想我应该在这里问一下。 在一些地方,本书使用字节掩码来避免符号扩展。下面是一个例子:

private final static int BYTEMASK = 0xFF; //8 bits

public static long decodeIntBigEndian(byte[] val, int offset, int size) {
    long rtn = 0;
    for(int i = 0; i < size; i++) {
        rtn = (rtn << Byte.SIZE) | ((long) val[offset + i] & BYTEMASK);
    }
    return rtn;
}
private final static int BYTEMASK=0xFF//8位
公共静态长解码IntBigendian(字节[]val,int偏移量,int大小){
长rtn=0;
对于(int i=0;irtn=(rtn除最后一点外,一切正常:


0xFF
已经是
int
0x000000FF
)一般来说,在Java中是
int
s,除非它们以
L
L
结尾,然后它们是
long
s。

0xFF
是一个int,为什么它会被符号扩展?在二进制中是
11111111111
。乍一看,这篇文章看起来与臭名昭著的“XHTML wi”非常相似正则表达式的帖子…你们能不能少一点居高临下?即使你们似乎已经得到了答案,对你们的问题文本做了一个更正:
0xFF
!=
11111111111111
,但只是
11111111
。啊,是的,我不知道为什么我写了那个。写了所有的0和1肯定是疯了。谢谢你们的回复wer.+1如果我有足够的声誉这么做的话。@elveatles接受答案。这是你无论如何都应该做的事情,你也会因此获得一些声誉。单击答案左侧的复选标记。