将有符号字节转换为无符号半字节
Turn a signed byte into an unsigned half-byte
所以我这里有一个小问题,我不知道哪里出了问题。
这就是为什么我要问这个(我现在给你看的)是否正确。
我正在将二进制文件转换为字节列表,这样我就可以将这些字节转换为半字节。
例如:
如果我得到 96 作为十进制数(60 作为十六进制数),我想从中得到 6 和 0。 127(十六进制:7F)也是如此——我想得到 7 和 15。为了实现这一点,我编写了以下代码:
您会注意到,我需要 "unsigned bytes" 才能工作
System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16)) / 16));
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16));
public static int unsignedToBytes(byte b) {
return b & 0xFF;
}
我是不是做错了什么或者这不是问题?
使用移位和按位运算:
- 要获取低四位,请使用
lowerNibble = wholeByte & 0x0F
- 要获取高四位,请使用
upperNibble = (wholeByte >> 4) & 0x0F
这忽略了符号,因为数字的上半部分被 & 0x0F
截断了。
所以我这里有一个小问题,我不知道哪里出了问题。 这就是为什么我要问这个(我现在给你看的)是否正确。 我正在将二进制文件转换为字节列表,这样我就可以将这些字节转换为半字节。 例如: 如果我得到 96 作为十进制数(60 作为十六进制数),我想从中得到 6 和 0。 127(十六进制:7F)也是如此——我想得到 7 和 15。为了实现这一点,我编写了以下代码: 您会注意到,我需要 "unsigned bytes" 才能工作
System.out.println((byte) ((UnsignedByte.unsignedToBytes(b) - (UnsignedByte.unsignedToBytes(b) % 16)) / 16));
System.out.println((byte) (UnsignedByte.unsignedToBytes(b) % 16));
public static int unsignedToBytes(byte b) {
return b & 0xFF;
}
我是不是做错了什么或者这不是问题?
使用移位和按位运算:
- 要获取低四位,请使用
lowerNibble = wholeByte & 0x0F
- 要获取高四位,请使用
upperNibble = (wholeByte >> 4) & 0x0F
这忽略了符号,因为数字的上半部分被 & 0x0F
截断了。