在C#中将字节数组转换为短数组

时间:2009-07-09 15:23:28

标签: c# bytearray

我正在读取一个文件,希望能够将从文件中获取的字节数组转换为一个短数组。

我将如何做到这一点?

7 个答案:

答案 0 :(得分:56)

使用Buffer.BlockCopy

以字节数组大小的一半创建短数组,并将字节数据复制到:

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();