十六进制值不写入图像
hex value not writing to image
我正在尝试构建一个更大的工具,它将从 .RTF 格式中获取十六进制字符串并将它们转储到文件中。这种从内存流写入文件的尝试在 ReadTimeout 和 WriteTimeout 上引发了 'System.InvalidOperationException' 类型的异常。我相信我有点不知所措。
我正在使用的代码是:
private void button_Click(object sender, RoutedEventArgs e)
{
// Image hex data
string hexImgData = @"FFD8FFE000104A46494600010200006400640000FFFFD9";
// Call function to Convert the hex data to byte array
byte[] newByte = ToByteArray(hexImgData);
MemoryStream memStream = new MemoryStream(newByte);
// Save the memorystream to file
Image image = Image.FromStream(memStream, false, false);
image.Save(@"C:\img.jpg");
memStream.Close();
image.Dispose();
}
// Function converts hex data into byte array
public static byte[] ToByteArray(String HexString)
{
int NumberChars = HexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
}
return bytes;
}
}
如有任何帮助,我们将不胜感激
如果您只想获取一个十六进制字符串并将其转储到一个文件中,则无需通过将其包装在 MemoryStream
和 Image
中来使其过于复杂。只需将字节直接写入文件即可:
File.WriteAllBytes(@"C:\img.jpg", newByte);
您收到错误的原因正如 Ron 所评论的那样;您提供的十六进制字符串未形成有效的 JPEG 图像。
我正在尝试构建一个更大的工具,它将从 .RTF 格式中获取十六进制字符串并将它们转储到文件中。这种从内存流写入文件的尝试在 ReadTimeout 和 WriteTimeout 上引发了 'System.InvalidOperationException' 类型的异常。我相信我有点不知所措。
我正在使用的代码是:
private void button_Click(object sender, RoutedEventArgs e)
{
// Image hex data
string hexImgData = @"FFD8FFE000104A46494600010200006400640000FFFFD9";
// Call function to Convert the hex data to byte array
byte[] newByte = ToByteArray(hexImgData);
MemoryStream memStream = new MemoryStream(newByte);
// Save the memorystream to file
Image image = Image.FromStream(memStream, false, false);
image.Save(@"C:\img.jpg");
memStream.Close();
image.Dispose();
}
// Function converts hex data into byte array
public static byte[] ToByteArray(String HexString)
{
int NumberChars = HexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
}
return bytes;
}
}
如有任何帮助,我们将不胜感激
如果您只想获取一个十六进制字符串并将其转储到一个文件中,则无需通过将其包装在 MemoryStream
和 Image
中来使其过于复杂。只需将字节直接写入文件即可:
File.WriteAllBytes(@"C:\img.jpg", newByte);
您收到错误的原因正如 Ron 所评论的那样;您提供的十六进制字符串未形成有效的 JPEG 图像。