我想获取固定的8字节数组中“长”的字节数组值
scala> Long.MaxValue
res191: Long = 9223372036854775807
scala> val i:Long = Long.MaxValue
i: Long = 9223372036854775807
scala> BigInt(i).toByteArray
res192: Array[Byte] = Array(127, -1, -1, -1, -1, -1, -1, -1)
scala> val i:Long = 100
i: Long = 100
scala> BigInt(i).toByteArray
res193: Array[Byte] = Array(100) // what I want is Array(0, 0, 0, 0, 0, 0, 0, 100)
scala>
我正在做的是
scala> var a:Array[Byte] = Array(0, 0, 0, 0, 0, 0, 0, 0)
a: Array[Byte] = Array(0, 0, 0, 0, 0, 0, 0, 0)
scala> a.slice(0,8-BigInt(i).toByteArray.length) ++ BigInt(i).toByteArray
res200: Array[Byte] = Array(0, 0, 0, 0, 0, 0, 0, 100)
scala>
我不确定它是否可靠。是否有更好的方法来获得它?
答案 0 :(得分:4)
几个选项:
val a = Array.fill[Byte](8)(0)
(a ++ BigInt(i).toByteArray).takeRight(8)
或
BigInt(i).toByteArray.reverse.padTo(8, 0).reverse
如果值的位数超过8位,则第二个具有健壮性。