我有一个字节数组,并希望将其转换为短数组 输入:[1,2,3,4] 输出:[0x102,0x304]
有什么方法可以打电话吗?
答案 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