2016-03-27 49 views
1

所以我在这里有一个小问题,我不知道什么是错的。 这就是为什么我问这是否(我现在给你看)是正确的。 我将二进制文件转换为字节列表,以便我可以将这些字节转换为半字节。 例如: 如果我得到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; 
} 

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

+0

问题是什么? – Natecat

+0

我得到错误的坐标错误值,我只想知道问题是否在这里 – RoiEX

回答

1

使用位移位和位操作:

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

这无视标志,因为该号码的上半部分被截断了& 0x0F

+0

这是否工作值大于0x80? – RoiEX

+0

@RoiEX绝对如此。 – dasblinkenlight

相关问题