gpt4 book ai didi

java 以偏移量和长度从 byte 到 int 传输位

转载 作者:行者123 更新时间:2023-12-01 11:13:12 25 4
gpt4 key购买 nike

我试图将一个字节中的一定数量的位传输到 int 的开头,但它没有按计划工作。

public int transfer(byte b, int offset, int len, int dest, int bitsInUSe){
byte mask = (byte) ((byte) ((1 << len) - 1) << offset);
dest = dest<< bitsInUSe;
dest = b & mask;
return dest ;
}

例如,字节 00111000 的偏移量 2 和长度 3 应该产生 int>00000000000000000000000000000110

我只需要将这些位放在 int 的开头,但我需要将之前分配给左侧的任何位移动,这样它们就不会被覆盖,因此需要使用 BitsInUse 变量。

最佳答案

这应该可以满足您的要求(我更改了一些变量名称)。请注意,您必须传入 currBitsUsed >= len 等值,否则移位的 currb 位将会发生冲突。

public int transfer(byte b, int offset, int len, int curr, int currBitsUsed) {
byte mask = (byte)((1 << len) - 1);
return (curr << currBitsUsed) | ((byte)((b) >>> offset) & mask);
}

这是一个自动计算要移动 curr 的位数以避免冲突的版本。

public int transfer(byte b, int offset, int len, int curr) {
int currShift = Math.max(32 - Integer.numberOfLeadingZeros(curr), len);
byte mask = (byte)((1 << len) - 1);
return (curr << currShift) | ((byte)((b) >>> offset) & mask);
}

关于java 以偏移量和长度从 byte 到 int 传输位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130931/

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