Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取和写入5字节长的_Java - Fatal编程技术网

Java 读取和写入5字节长的

Java 读取和写入5字节长的,java,Java,我正在处理一个缓冲区,它读取一个无符号的短字符,然后读取一个3字节的整数,并将它们组合起来。问题是我不知道如何正确地添加一个整数,以便读取的数字(“结果”)与我添加到缓冲区的数字相同 long val1 = (long) buffer.getUnsignedShort(); long val2 = (long) buffer.get3ByteInt(); long result = val2 + (val1 << 32); public int getUnsignedShort()

我正在处理一个缓冲区,它读取一个无符号的短字符,然后读取一个3字节的整数,并将它们组合起来。问题是我不知道如何正确地添加一个整数,以便读取的数字(“结果”)与我添加到缓冲区的数字相同

long val1 = (long) buffer.getUnsignedShort();
long val2 = (long) buffer.get3ByteInt();
long result = val2 + (val1 << 32);

public int getUnsignedShort() {
    return (byteArray[position++] & 255 << 8) + byteArray[position++] & 255;
}
public int get3ByteInt() {
    return (byteArray[position++] & 255 << 16) + (byteArray[position++] & 255 << 8) + byteArray[position++] & 255;
}
long val1=(long)buffer.getUnsignedShort();
long val2=(long)buffer.get3ByteInt();

long result=val2+(val1除了
3*8=24
not 32这一事实之外,您还存在运算符优先级问题。移位运算符的优先级高于按位and运算符。因此,您的代码将重新写入:

return (byteArray[position++] & (255 << 8)) + (byteArray[position++] & 255);

return(byteArray[position++]&(2553*8=32)(你试过问鸭子吗?)在一个表达式中多次使用
position++
从技术上讲是可行的,但这是一种不好的做法,很容易在不经意间将未来的更改搞砸。a将使整个过程变得相当简单。
long val1 = buffer.getUnsignedShort();
long val2 = buffer.get3ByteInt();
long result = val2 | (val1 << 24);

public int getUnsignedShort() {
    return ((byteArray[position++] & 0xFF) << 8) | (byteArray[position++] & 0xFF);
}
public int get3ByteInt() {
    return ((byteArray[position++] & 0xFF) << 16) | ((byteArray[position++] & 0xFF) << 8) | (byteArray[position++] & 0xFF);
}