2011-12-29 57 views
0

好吧,我试图转换一个字节[]为短[],或Int16 []。转换字节[]为简短[]

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件事:它做了什么,而不是工作,你能告诉我们转换的预期结果是什么?哦,还有第三件事:你的代码正在创建一个短裤阵列列表。也许你想'List '而不是'List '。 – phoog 2011-12-29 23:54:16

+0

[有效转换音频字节 - 字节\ [\]以缩短\ [\]](http://stackoverflow.com/questions/5728865/efficiently-convert-audio-bytes-byte-to- short) – 2011-12-29 23:59:48

回答

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位。 – 2011-12-31 02:59:22

+0

我很清楚。他从来没有说过要将每个2字节的数据集合到Int16中。 – 2011-12-31 03:39:31

0

你可能想要BitConverter.ToInt16(),你需要为每对字节调用。

或者,使用Buffer.BlockCopy立即执行(使用机器的本机字节顺序)。

+0

我用Buffer.BlockCopy得到了它。谢谢! – Banksy 2011-12-31 02:57:51

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位。 – 2011-12-31 03:00:24

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位。 – 2011-12-31 03:00:10

+0

这是正确的,本质上是要求:“尝试将字节[]转换为短[]或Int16 []”。 – 2012-01-05 19:16:39

+0

通常所期望的是将两个字节变成一个短。或者至少这更容易产生一个问题,因为把一个字节变成一个简单的东西很容易。 – 2012-01-05 19:54:00