【发布时间】:2009-07-09 15:23:28
【问题描述】:
我目前正在读取一个文件,并希望能够将从文件中获得的字节数组转换为一个短数组。
我该怎么做呢?
【问题讨论】:
-
您想将 1 个字节转换为 1 个短字节,还是将 2 个字节转换为 1 个短字节?
我目前正在读取一个文件,并希望能够将从文件中获得的字节数组转换为一个短数组。
我该怎么做呢?
【问题讨论】:
创建字节数组一半大小的短数组,并将字节数据复制到:
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 是两个字节的组合。如果您将所有短裤作为真正的短裤写入文件,那么这些转换是错误的。您必须使用两个字节来获得真正的短值,使用类似:
short s = (short)(bytes[0] | (bytes[1] << 8))
【讨论】:
short value = BitConverter.ToInt16(bytes, index);
【讨论】:
我不知道,但我会期待另一种方法来解决这个问题。 将字节序列转换为短裤序列时,我会像 @Peter 那样完成
short s = (short)(bytes[0] | (bytes[1] << 8))
或
short s = (short)((bytes[0] << 8) | bytes[1])
取决于文件中字节的字节序。
但是OP没有提到他对短裤的使用或文件中短裤的定义。 在他的情况下,将字节数组转换为短数组是没有意义的,因为它会占用两倍的内存,而且我怀疑在其他地方使用时是否需要将字节转换为短数组。
【讨论】:
short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
【讨论】:
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();
【讨论】: