我有一个这样的无符号数据表示形式:
val str = "145 38 0 255 0 1"
我现在想获得此无符号表示形式的byteString,然后我可以对各个位进行操作以提取信息。所以基本上我想要的是获得未签名的版本。
例如,145的无符号二进制表示形式为10010001,而有符号版本为-00000111。
scala> 145.byteValue
res128: Byte = -111 // I would need an unsigned value instead!
那么有功能或方法可以将145转换为无符号表示吗?
答案 0 :(得分:1)
有符号和无符号字节(或Ints或Longs)只是解释相同二进制位的两种不同方式。 在带符号字节中,从左起的第一位(最高有效位)被解释为符号。
0表示正,1表示负。
对于负数,减号之后是256 - unsigned-value
。
因此,在您的情况下,我们得到的是256 - 145 = 111
。
Java / Scala bitwise operators在基础位上工作,而不是在有符号/无符号表示上工作,但当然结果在打印时仍会解释为有符号。
实际上,为了避免造成混乱,我只想处理Ints(或短裤)。 但是,它也可以和字节一起使用。
例如,要获得第n位,您可以执行以下操作:
def bitValue(byte: Byte, n: Byte) = {
val pow2 = Math.pow(2, n - 1).toInt
if((pow2 & byte) == 0) 0
else 1
}
bitValue(145.byteValue, 8)
res27: Int = 1