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

wil*_*oup 12 c# bytearray

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

我该怎么做呢?

小智 57

使用Buffer.BlockCopy.

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

short[] sdata = new short[(int)Math.Ceiling(data.Length / 2)];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);
Run Code Online (Sandbox Code Playgroud)

这是迄今为止最快的方法.

  • 谢谢!很好的答案,但我不得不将代码略微更改为:short [] sdata = new short [(int)Math.Ceiling(data.Length / 2.0)];。否则,我将得到以下错误:“以下方法或属性之间的调用不明确:'Math.Ceiling(decimal)'和'Math.Ceiling(double)'“ (2认同)

jas*_*son 12

一种可能性是使用Enumerable.Select:

byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();
Run Code Online (Sandbox Code Playgroud)

另一种是使用Array.ConvertAll:

byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);
Run Code Online (Sandbox Code Playgroud)

  • 当我使用var shorts [] = Array.ConvertAll(bytes,b =>(short)b); 我将每个字节转换为short而不是每对字节转换. (2认同)

小智 5

shorthard 是两个字节的组合。如果您将所有短裤作为真正的短裤写入文件,那么这些转换是错误的。您必须使用两个字节来获取真正的短值,使用类似的方法:

short s = (short)(bytes[0] | (bytes[1] << 8))
Run Code Online (Sandbox Code Playgroud)

  • 假设小端,这应该是:short s = (short)(bytes[0] | (bytes[1] &lt;&lt; 8)) (4认同)