Преобразовать байт [] в короткий [] - PullRequest
0 голосов
/ 30 декабря 2011

Хорошо, я пытаюсь преобразовать байт [] в короткий [] или 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])));

Это то, что я пытался, но, очевидно, это не работает,Так как бы я это сделал?

Ответы [ 4 ]

1 голос
/ 30 декабря 2011

Мне кажется, что вы хотите преобразовать весь массив в одну строку.Это можно сделать так:

List<Int16[]> lol = new List<Int16[]>();
byte[] b = System.Text.Encoding.Default.GetBytes("lolololololololololololoolol");
lol.Add(Array.ConvertAll(b, x => Convert.ToInt16(x)));
0 голосов
/ 30 декабря 2011

Вы, вероятно, хотите BitConverter.ToInt16(), который вам нужно будет вызывать для каждой пары байтов.

Или используйте Buffer.BlockCopy, чтобы сделать этовсе сразу (используя собственный порядок байтов машины).

0 голосов
/ 30 декабря 2011
        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 голосов
/ 30 декабря 2011

Вы должны пройти через байтовый массив и преобразовать каждый элемент.

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);
...