scala-如何获取固定大小为8个字节的Long值的byteArray

时间:2019-01-23 16:29:34

标签: scala

我想获取固定的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>

我不确定它是否可靠。是否有更好的方法来获得它?

1 个答案:

答案 0 :(得分:4)

几个选项:

val a = Array.fill[Byte](8)(0)

(a ++ BigInt(i).toByteArray).takeRight(8)

BigInt(i).toByteArray.reverse.padTo(8, 0).reverse

如果值的位数超过8位,则第二个具有健壮性。