将带符号的字节转换为无符号半字节

时间:2016-03-27 22:59:33

标签: java bit unsigned

所以我在这里遇到了小问题,我不知道可能出现什么问题。 这就是为什么我问这个(我现在要告诉你的)是否正确。 我正在将二进制文件转换为字节列表,以便我可以将这些字节转换为半字节。 例如: 如果我得到96作为十进制数(60作为十六进制)我想得到6和0。与127相同的事情(十六进制:7F) - 我想得到7和15.为实现这一点,我编写了以下代码: 你会注意到,为了工作我需要“无符号字节”

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;
}

我做错了什么或这不是问题?

1 个答案:

答案 0 :(得分:1)

使用位移和按位操作:

  • 要获得较低的四位,请使用lowerNibble = wholeByte & 0x0F
  • 要获得高四位,请使用upperNibble = (wholeByte >> 4) & 0x0F

这会忽略该符号,因为该号码的上半部分被& 0x0F截断。