Как я могу конвертировать байты в шорты - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь преобразовать байтовый массив в массив в шорты, но, похоже, он не работает.Проблема в том, что мой цикл for остановится, когда доберется до битконвертера.Вот мой фрагмент кода:

byte[] input = File.ReadAllBytes("frame.jpg");
short[] output = new short[input.Length / 2];
Console.WriteLine("Converting bytes to shorts");
for (int i = 0; i == input.Length; i++)
{
    output[i/2] = BitConverter.ToInt16(input, i);
    Console.WriteLine(Convert.ToString(output[i/2]) + " ");
}

Я ценю любую помощь, которую вы можете оказать.

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

Это было не так уж далеко, только несколько логических ошибок в цикле for:

public static void Main()
{
        byte[] input = File.ReadAllBytes("frame.jpg");
        short[] output = new short[input.Length / 2];
        Console.WriteLine("Converting bytes to shorts");
        for (int i = 0; i < input.Length-1; i+=2)
        {
            output[i/2] = BitConverter.ToInt16(input, i);
            Console.WriteLine(Convert.ToString(output[i/2]) + " ");
        }   
}

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

0 голосов
/ 25 ноября 2018

Вчера я опубликовал поспешный ответ и удалил его, потому что, честно говоря, вопрос мог бы быть намного лучше ... С некоторым выводом я пришел к выводу, что на самом деле вы хотите загрузить кучу байтовв их представлении слова.Значение сдвиг первого байта влево на 8 битов и добавление второго байта.

byte[] bytes = File.ReadAllBytes("frame.jpg");
var output = new List<ushort>();
for (int i = 0; i < bytes.Length; i += 2)
{
    try
    {
        output.Add((ushort)((bytes[i] * 256) + bytes[i + 1]));
    }
    catch (IndexOutOfRangeException ex)
    {
        output.Add((ushort)(bytes[i] * 256));
    }
}
return output.ToArray();
0 голосов
/ 25 ноября 2018

Вы использовали ToInt16(input, i) в своем коде.Поэтому я думаю, что это было неправильно.Я предлагаю вам использовать BitConverter.ToInt16(new byte[2] {(byte)input[i] , (byte)input[i+1] },i) для решения ваших проблем.

...