14

私は現在ファイルを読んでいて、ファイルから取得したバイト配列を短い配列に変換できるようにしたいと考えていました。

どうすればこれを行うことができますか?

4

7 に答える 7

65

Buffer.BlockCopyを使用します。

バイト配列の半分のサイズで短い配列を作成し、バイトデータを次の場所にコピーします。

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

これは断然最速の方法です。

于 2010-10-30T18:27:10.570 に答える
13

1つの可能性は次を使用していEnumerable.Selectます:

byte[] bytes;
var shorts = bytes.Select(b => (short)b).ToArray();

もう1つは使用することArray.ConvertAllです:

byte[] bytes;
var shorts = Array.ConvertAll(bytes, b => (short)b);
于 2009-07-09T15:25:38.030 に答える
5

ショートハードは 2 バイトの複合です。すべての short を真の short としてファイルに書き込んでいる場合、それらの変換は間違っています。次のようなものを使用して、真の short 値を取得するには 2 バイトを使用する必要があります。

short s = (short)(bytes[0] | (bytes[1] << 8))
于 2009-08-09T00:31:24.367 に答える
2
short value = BitConverter.ToInt16(bytes, index);
于 2010-04-30T12:52:05.977 に答える
1

わかりませんが、この質問に対する別のアプローチを期待していたでしょう。一連のバイトを一連の short に変換するとき、@Peter のように実行します

short s = (short)(bytes[0] | (bytes[1] << 8))

また

short s = (short)((bytes[0] << 8) | bytes[1])

ファイル内のバイトのエンディアンに応じて。

しかし、OPは、ショートパンツの使用法やファイル内のショートパンツの定義について言及していませんでした. 彼の場合、バイト配列を short 配列に変換しても意味がありません。2 倍のメモリが必要になるためです。他の場所で使用するときにバイトを short に変換する必要があるかどうかは疑問です。

于 2016-11-15T09:59:24.383 に答える
0
 short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
于 2009-07-09T15:26:06.530 に答える
-2
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();
于 2009-07-09T15:28:13.780 に答える