gpt4 book ai didi

Java:尝试将大于 127 的字节添加到 ByteBuffer

转载 作者:行者123 更新时间:2023-12-01 19:38:59 24 4
gpt4 key购买 nike

在我的程序中,我几乎正在使用 RandomAccessFile 读取文件系统,然后找到字节 1080 并返回该值,在本例中为 239。

现在,我正在使用 ByteBuffer 并希望将此值添加到 ByteBuffer 中,但由于显而易见的原因,它现在变成了 -17,而不是 239。有没有什么方法可以通过保持它的值来将其添加到 ByteBuffer/字节数组中原来的值(value)?我想最终将其转换为十六进制值,因此我不希望该值发生更改。

不确定这是否有意义,我知道 Java 中字节最多只能达到 127?有办法加到 255 吗?

最佳答案

问题在于总和扩展至 127 并设置了符号位。

      byte a = 121;
byte b = 110;

byte c = (byte) (a + b);
System.out.println(c + " " + (c & 0xFF));

b = (byte) 255;

c = (byte) (a + b);
System.out.println(c + " " + (c & 0xFF) + " " + (byte) 376);



打印

      -25 231
120 120 120


如果想要对符号扩展可能导致问题的多个值求和,最好将这些值转换为更宽的类型(字节到 int 或 int 到 long),并在添加之前屏蔽掉符号扩展。

      byte a = 121; 
b = (byte) 255;
int d = a + (b & 0xFF); // mask off sign with int mask.
System.out.println(d);

long e = 0;
int v = -1;
e = e + (v & 0xFFFF_FFFFL); // mask off sign with long mask
System.out.println(e);

打印

      376
4294967295

关于Java:尝试将大于 127 的字节添加到 ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59186687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com