【问题标题】:Turn a signed byte into an unsigned half-byte将有符号字节转换为无符号半字节
【发布时间】:2016-03-27 22:59:32
【问题描述】:

所以我在这里遇到了一个小问题,我不知道可能出了什么问题。 这就是为什么我要问这(我现在将向您展示的内容)是否正确。 我正在将二进制文件转换为字节列表,以便我可以将这些字节转换为半字节。 例如: 如果我得到 96 作为十进制数(60 作为十六进制数),我想从中得到 6 和 0。与 127 (hex: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;
}

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

【问题讨论】:

  • 有什么问题?
  • 我在错误的坐标处得到了错误的值,我只想知道问题是否在这里

标签: java bit unsigned


【解决方案1】:

使用位移和按位运算:

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

这忽略了符号,因为数字的上半部分被& 0x0F 截断。

【讨论】:

  • @RoiEX 确实如此。
猜你喜欢
  • 2011-10-21
  • 2015-01-12
  • 1970-01-01
  • 2018-04-07
  • 2017-10-01
  • 1970-01-01
  • 2013-07-11
  • 2018-05-25
  • 2023-04-01
相关资源
最近更新 更多