代码之家  ›  专栏  ›  技术社区  ›  stack0114106

scala-如何获取固定大小为8字节的长值字节数组

  •  2
  • stack0114106  · 技术社区  · 6 年前

    我想得到固定8字节数组中“long”的字节数组值

    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 回复  |  直到 6 年前
        1
  •  4
  •   Tim    6 年前

    几个选项:

    val a = Array.fill[Byte](8)(0)
    
    (a ++ BigInt(i).toByteArray).takeRight(8)
    

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

    如果值超过8位,则第二个具有鲁棒性的优点。