答えて
一つの可能性は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番目のものを追加する前)はむしろ非効率的です –
別のオプションはbytes.Cast
実際には、この結果、InvalidCastExceptionが発生します。簡単な説明は、このコードがボックス化されたバイトを暗黙的にunboxingして、有効なunboxing操作ではないshortにすることです。詳細については、http://stackoverflow.com/questions/445471/puzzling-enumerable-cast-invalidcastexceptionを参照してください。 – jason
short[] wordArray = Array.ConvertAll(byteArray, (b) => (short)b);
byte[] bytes;
var shorts = bytes.Select(n => System.Convert.ToInt16(n)).ToArray();
これは非常に非効率です。すべての要素に対してconvert.ToInt16()を呼び出し、一時的なリストに格納して新しい配列にコピーします。 –
はい、それは非効率的です。私はそれが安全だと思っています。 –
キャスティングより安全ですか? byte to shortのキャストは常に機能します。それは例外を投げることはできません –
shorthardは、2バイトの化合物です。あなたがショートパンツとしてファイルにすべてのショートパンツを書いているなら、それらの変換は間違っています。
short s = (short)(bytes[0] | (bytes[1] << 8))
short value = BitConverter.ToInt16(bytes, index);
使用Buffer.BlockCopy:あなたはのようなものを使用して、真のshort値を取得するために2つのバイトを使用する必要があります。
バイト配列の半分の大きさで短い配列を作成し、中にバイトデータをコピーします。それははるかに最速の方法です
short[] sdata = new short[(int)Math.Ceiling(data.Length/2)];
Buffer.BlockCopy(data, 0, sdata, 0, data.Length);
。
解決策は私には当てはまりませんが、 – DaMachk
私は知らないが、私はこの質問に別のaproachを期待していただろう。 ショートパンツのシーケンスにバイトのシーケンスを変換する場合、私は@Peterは、ファイル内のバイトのエンディアンに依存
short s = (short)(bytes[0] | (bytes[1] << 8))
または
short s = (short)((bytes[0] << 8) | bytes[1])
を行ったようにそれが行われています。
しかし、OPには、彼のファイルの短所や短所の定義が使われていませんでした。 彼の場合、バイト配列を短い配列に変換するのは意味がありません。なぜなら、それは2倍のメモリを必要とするからです。そして、他の場所で使用されたときにshortに変換する必要があるかどうかわかりません。
- 1. バイト配列(char配列)を整数型(short、int、long)に変換する
- 2. C#バイト配列に変換
- 3. リトルエンディアン順のバイト配列値をshort値に変換する
- 4. short型の配列をdouble型の配列に変換する
- 5. int []配列をJavaのshort []配列に変換します。
- 6. PNG圧縮バイト配列をBMPバイト配列に変換する
- 7. JSONをCのバイト配列に変換
- 8. 変換バイト配列
- 9. 2D numpy配列をC++ short **に変換しますか?
- 10. Golangでint配列をバイト配列に変換する
- 11. データのコピーを行わずにバイトの配列をshortの配列に変換する
- 12. (short、int、long、float、double、bigint)をバイト配列に変換する:Scala/Java
- 13. C#でバイト配列をint配列に変換する際のエラー
- 14. C++ UTFバイト配列を文字列に変換する
- 15. バイト配列をC#の文字列に変換する
- 16. サンプルを含む配列をバイト配列に変換する
- 17. NSStringをバイト配列に変換する
- 18. バイト配列をUIImageに変換する
- 19. バイト配列をlongに変換する
- 20. int16をバイト配列に変換する
- 21. バイト配列をpngに変換する
- 22. バイナリをバイトに変換する[]配列
- 23. D3DImageをバイト配列に変換する
- 24. JavaScriptをバイト配列に変換する
- 25. バイト配列を文字列に変換してバイト配列に戻す
- 26. バイト配列をint配列に変換する方法は?
- 27. バイト配列を短い配列に変換する
- 28. Cでバイト配列をdoubleに変換するには?
- 29. バイト配列で表されるInt32配列をC言語でInt32配列に変換する方法
- 30. 変換バイト配列 - ルビー
1バイトを1に、2バイトを1に短く変換しますか? – maxwellb