数据类型转换
因为最近在写一个协议上报的项目,涉及到数据的转换字节,mark一下以后使用
(Double 8字节、float 4字节 、 Short 2字节 )
如果各位大佬有更合适的方法可以留言
Double => Bytes
def doubleToBytes(data:Double):Array[Byte]={
var result:Array[Byte] =new Array[Byte](8)
var longData:Long = java.lang.Double.doubleToLongBits(data)
for(i <- 0 until 8){
result(i) = ((longData >> 8* i) & 0xff).toByte
}
result
}
Bytes => Double
def bytesToDouble(data:Array[Byte]) :Double ={
//先将数组位置转换
import scala.collection.JavaConversions._
var arr = ArrayBuffer[Byte]()
data.foreach(x=>{
arr.append(x)
})
java.util.Collections.reverse(arr)
val dis = new DataInputStream(new ByteArrayInputStream(arr.toArray))
val d = dis.readDouble()
dis.close()
d
}
Short => Bytes
def short2Bytes(data:Short):Array[Byte]={
val byteArray = new Array[Byte](2)
for(i <- 0 until byteArray.length){
val num = byteArray.length - 1 - i
val offset = 16 - (i+1)*8
byteArray(num) = ((data >> offset) &0xff).toByte
}
byteArray
}
Float => Bytes
def float2BytesUtil(data:Float):Array[Byte]={
// 把float转换为byte[] // 把float转换为byte[]
val fbit = java.lang.Float.floatToIntBits(data)
val arr = ArrayBuffer[Byte]()
for(i <- 0 until 4){
arr.append((fbit >> (24 - i *8)).toByte)
}
val dest = arr.toArray
val len = arr.length
for(i <- 0 until len/2){
val temp = dest(i)
dest(i) = dest(len - i - 1)
dest(len - i - 1) = temp
}
dest
}