我正在读取一个文件,希望能够将从文件中获取的字节数组转换为一个短数组。
我将如何做到这一点?
答案 0 :(得分:56)
以字节数组大小的一半创建短数组,并将字节数据复制到:
short[] sdata = new short[(int)Math.Ceiling(data.Length / 2)];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);
这是迄今为止最快的方法。
答案 1 :(得分:12)
一种可能性是使用Enumerable.Select
:
byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();
另一种方法是使用Array.ConvertAll
:
byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);
答案 2 :(得分:3)
shorthard是两个字节的复合。如果你把所有短片都写成真正的短片,那么这些转换是错误的。您必须使用两个字节来获取真正的短值,使用类似:
short s = (short)(bytes[0] | (bytes[1] << 8))
答案 3 :(得分:1)
short value = BitConverter.ToInt16(bytes, index);
答案 4 :(得分:0)
short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
答案 5 :(得分:0)
我不知道,但我本来期待这个问题的另一个方法。 当将一个字节序列转换为一系列短路时,我会像@Peter一样完成
Thread socketClientThread;
socketClientThread = new Thread(new SocketClientThread());
socketClientThread.start();
或
short s = (short)(bytes[0] | (bytes[1] << 8))
取决于文件中字节的字节顺序。
但OP没有提及他对短裤的使用或文件中短裤的定义。 在他的情况下,将字节数组转换为短数组是没有意义的,因为它需要两倍的内存,我怀疑在其他地方使用时是否需要将一个字节转换为short。
答案 6 :(得分:-2)
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();