我正在尝试将字节数组转换为短裤数组,但似乎不起作用。问题是,我的for循环在到达bitconverter时将停止。这是我的代码段:
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]) + " ");
}
感谢您能提供的任何帮助。
答案 0 :(得分:1)
昨天我发布了一个仓促的答案并删除了它,因为老实说,这个问题可能会好得多...经过一些推论,我得出的结论是,您实际要做的是加载一堆字节变成他们的单词表示形式。意思是将第一个字节向左移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();
答案 1 :(得分:0)
您在代码中使用了ToInt16(input, i)
。
所以我认为这是错误的。
建议您使用BitConverter.ToInt16(new byte[2] {(byte)input[i] , (byte)input[i+1] },i)
来解决问题。
答案 2 :(得分:0)
相距不远,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]) + " ");
}
}
您还应该检查输入图像的字节数是否为偶数。