如何在Scala中将字节数组转换为短数组?

时间:2015-06-22 20:59:59

标签: scala

我有一个字节数组,并希望将其转换为短数组 输入:[1,2,3,4] 输出:[0x102,0x304]

有什么方法可以打电话吗?

2 个答案:

答案 0 :(得分:3)

Peter Neyens的grouped(2).map方法就是我要做的,虽然只是简单地使用bitshift而不是通过ByteBuffer的所有努力:

def convert(in: Array[Byte]): Array[Short] = 
  in.grouped(2).map { case Array(hi, lo) => (hi << 8 | lo).toShort } .toArray

val in  = Array(1.toByte, 2.toByte, 3.toByte, 4.toByte)
val out = convert(in)
out.map(x => s"0x${x.toHexString}") // 0x102, 0x304

如果您的输入可能有奇数,请在模式匹配中使用额外的case,如Peter的答案所示。

答案 1 :(得分:0)

您可以使用toShort的{​​{1}}方法:

Byte

我发现您希望将两个val bytes = Array[Byte](1, 2, 3, 4, 192.toByte) bytes: Array[Byte] = Array(1, 2, 3, 4, -64) bytes.map(_.toShort) res1: Array[Short] = Array(1, 2, 3, 4, -64) 合并为一个Byte

Short