gpt4 book ai didi

Java从函数中去除零

转载 作者:行者123 更新时间:2023-12-02 00:46:42 25 4
gpt4 key购买 nike

我正在尝试在 Java 中翻转一些字节,我所拥有的函数对于某些字节工作正常,而对于其他字节则失败。

我使用的功能是这样的:

public static int foldInByte(int m, int pos, byte b) {
int tempInt = (b << (pos * 8));
tempInt = tempInt & (0x000000ff << (pos * 8));
m = m | tempInt;
return m;
}

实现这个的代码是:

byte[] bitMaskArray = new byte[]{
byteBuffer.get(inputIndex),
byteBuffer.get(inputIndex + 1),
byteBuffer.get(inputIndex + 2),
byteBuffer.get(inputIndex + 3)};
int tempInt = 0;

tempInt = foldInByte(0, 3, bitMaskArray[3]);
tempInt = foldInByte(tempInt, 2, bitMaskArray[2]);
tempInt = foldInByte(tempInt, 1, bitMaskArray[1]);
tempInt = foldInByte(tempInt, 0, bitMaskArray[0]);

bitMask = tempInt;

正在从 ByteBuffer 中读取字节,字节顺序为 Little Endian。

例如,字节 00 01 B6 02 将位掩码设置为:2B60100 - 这在我的程序中完美运行。

但是,如果字节为 A0 01 30 00,则位掩码设置为:3001A0 - 已从位掩码中去掉最后一个零。

有什么方法可以阻止 Java 去掉尾随零吗?

我希望这是有道理的。

谢谢

托尼

最佳答案

零没有被删除——引用的两个例子都是正确的。

  • 00 01 B6 02 是 2B60100 的 4 字节小端
  • A0 01 30 00 是 3001A0 的 4 字节小端

零在那里,但可能只是没有被打印出来。 System.out.print 系列调用不会打印前导零数字。

我可能会提到你的方法不必要地复杂。这是计算相同值的单个方法:

static int extractLittleEndian4(byte[] buf, int index)
{
int a = buf[index+0]&0xff, b = buf[index+1]&0xff, c = buf[index+2]&0xff, d = buf[index+3]&0xff;
return a | (b << 8) | (c << 16) | (d << 24);
}

关于Java从函数中去除零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4795337/

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