我正在读取一个文件,并希望能够将从文件中获取的字节数组转换为短整型数组。
我该如何处理?
使用Buffer.BlockCopy方法。
将短数组创建为字节数组长度的一半,并将字节数据复制进去:
short[] sdata = new short[(int)Math.Ceiling(data.Length / 2)];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);
这绝对是目前最快的方法。
一种可能性是使用Enumerable.Select
:
byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();
另一种方法是使用 Array.ConvertAll
:
byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);
「shorthard」是由两个字节组成的复合类型。如果您将所有的 shorts 写入文件时都当作真正的 shorts,那么这些转换就是错误的。您必须使用两个字节来获取真正的 short 值,可以类似这样:
short s = (short)(bytes[0] | (bytes[1] << 8))
short value = BitConverter.ToInt16(bytes, index);
short s = (short)(bytes[0] | (bytes[1] << 8))
或者
short s = (short)((bytes[0] << 8) | bytes[1])
short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();