java - 将有符号字节转换为无符号半字节

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

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

最佳答案

使用位移位和按位运算:

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

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

关于java - 将有符号字节转换为无符号半字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36253694/

相关文章:

java.lang.ClassFormatError : Duplicate method name&signature in class file 错误

java - 创建 RSS 源 XML 文件时出错 - Java

java - 将 Java 1.5 重写为 1.4

c - 递归位逆向程序

c++ - 有效地将 unsigned short 转换为 char*

binary - 有符号和无符号二进制有什么区别

java - 如何将 long (currentTimeInMillis) 转换为 UTC 时间戳?

c++ - 为什么不仅仅将 boolean 值进行比较?

C++ 原始数据类型 : how to read unsigned 30 bits

objective-c - 在 Objective-C 中从 unsigned char * 到 char * 的定义行为