2011-12-29 6 views
0

さて、私はバイト[]をshort []またはInt16 []に変換しようとしています。byte []をshort []に変換する

List<Int16[]> lol = new List<Int16[]>(); 
byte[] b = System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
lol.Add(Convert.ToInt16(b)); 

MessageBox.Show(Encoding.Default.GetString(Encoding.Default.GetBytes(lol[0]))); 

これは私が試したものですが、明らかに動作しません。だから私はこれをどうやってやるのだろう?

+1

2つのこと:作業の代わりに何をして、変換の予想される結果が何であるか教えていただけますか?ああ、そして3番目のこと:あなたのコードは、ショートの配列のリストを作成しています。 'List 'ではなく 'List 'がほしいかもしれません。 – phoog

+0

可能な複製[オーディオバイトを効率的に変換する - バイト\ [\]をショート\ [\]に変換する(http://stackoverflow.com/questions/5728865/efficiently-convert-audio-bytes-byte-to-short) –

答えて

0

バイト配列を調べて、各要素を変換する必要があります。

List<Int16[]> lol=new List<Int16[]>(); 
byte [] b=System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
Int16 [] a=new Int16 [b.Length]; 
for (Int32 i=0;i<a.Length;++i) { 

    a[i]=Convert.ToInt16(b[i]); 

} 
lol.Add(a); 
+0

これは、各8ビットを短くする。しかし、短さは16ビットです。 –

+0

私はよく知っています。彼は2バイトの各セットをInt16にマージしようとすることについて何も言わなかった。 –

0

おそらくBitConverter.ToInt16()が必要です。それぞれのバイトのペアを呼び出す必要があります。

または、Buffer.BlockCopyを使用して(マシンのネイティブバイトオーダーを使用して)すべてを一度に実行します。

+0

私はBuffer.BlockCopyでそれを手に入れました。ありがとう! – Banksy

0
 byte[] by = new byte[5]; 
     short[] sh = new short[5]; 
     by[0] = 0x1; 
     by[1] = 0x2; 
     by[2] = 0x3; 
     by[3] = 0x4; 
     by[4] = 0x5; 

     for (int x = 0; x < sh.GetLength(0); x++) 
     { 
      sh[x] = by[x]; 
      MessageBox.Show(by[x].ToString()); 

それは私のために働いた。私が誤解しているかどうかわからない。

+0

これは、各8ビットを短くします。しかし、短さは16ビットです。 –

1

アレイ全体を1行に変換したいと思うようです。

List<Int16[]> lol = new List<Int16[]>(); 
byte[] b = System.Text.Encoding.Default.GetBytes("lolololololololololololoolol"); 
lol.Add(Array.ConvertAll(b, x => Convert.ToInt16(x))); 
+1

これは、各8ビットを短くします。しかし、短さは16ビットです。 –

+0

これは正しいことです。本質的には、「バイト[]を短い[]、またはInt16 []」に変換しようとしていることです。 –

+0

通常、2バイトが1つのshortになることが望まれます。あるいは、少なくとも1つのバイトを1つの短いものにすることはとても簡単なので、質問を生成する可能性はずっと高くなります。 –

関連する問題