gpt4 book ai didi

java - 在 Java 中将 4 个字节合二为一

转载 作者:行者123 更新时间:2023-11-29 09:47:29 25 4
gpt4 key购买 nike

代码如下:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;

public class Shiftcodes {
private Map<byte[], Byte> shiftMap;

public byte genoByte(byte b1, byte b2, byte b3, byte b4) {
return (byte) (
(b1 << 6)
| (b2 << 4)
| (b3 << 2)
| b4);
}

public static void main(String[] args) throws IOException {
Shiftcodes shiftcodes = new Shiftcodes();
byte b = shiftcodes.genoByte((byte) 0x01, (byte) 0x11, (byte) 0x00, (byte) 0x10);
FileOutputStream fileOutputStream = new FileOutputStream("/tmp/x.bin");
fileOutputStream.write(new byte[] {b});
}
}

假设每个字节的位都为零,除了最右边的两位可以是0或1。所以我稍微更改了代码:

public class Shiftcodes {
private Map<byte[], Byte> shiftMap;

public byte genoByte(byte b1, byte b2, byte b3, byte b4) {
return (byte) (
((b1 & 0x11) << 6)
| ((b2 & 0x11) << 4)
| ((b3 & 0x11) << 2)
| b4);
}

public static void main(String[] args) throws IOException {
Shiftcodes shiftcodes = new Shiftcodes();
byte b = shiftcodes.genoByte((byte) 0x01, (byte) 0x11, (byte) 0x00, (byte) 0x10);
FileOutputStream fileOutputStream = new FileOutputStream("/tmp/x.bin");
fileOutputStream.write(new byte[] {b});
}
}

但在这两种情况下,我都得到了预期的结果 (01110010):

xxd -b x.bin
0000000: 01010000 P

为什么?

最佳答案

最右边的两位将是 0x3 而不是 0x110x11 在二进制中是 00010001 而不是 00000011。

return (byte) (
((b1 & 0x3) << 6)
| ((b2 & 0x3) << 4)
| ((b3 & 0x3) << 2)
| b4);

关于java - 在 Java 中将 4 个字节合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30818930/

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