我有一个关于将二进制转换为十六进制然后将十六进制转换为二进制的问题。
例如,我有一个图像文件。首先我想将该图像转换为十六进制字符串,然后我想将此十六进制字符串插入数据库。当用户想要获取该图像文件时,程序必须从数据库中读取十六进制字符串,然后转换为图像文件。在 C# 中可能吗?
我尝试了 StackOverflow 中的一些示例方法,但我做不到。我做了一个图像文件,但它无法显示。
我在等你的帮助。
谢谢
让我们知道这是否对您有帮助 -
private string GetHexStringFromImage(System.Drawing.Image imageToConvert)
{
//Convert image it to byte-array
byte[] byteArray;
using (MemoryStream ms = new MemoryStream())
{
imageToConvert.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
//Convert byte-array to Hex-string
StringBuilder hexBuilder = new StringBuilder();
foreach (byte b in byteArray)
{
string hexByte = b.ToString("X");
//make sure each byte is represented by 2 Hex digits
string tempString = hexByte.Length % 2 == 0 ? hexByte : hexByte.PadLeft(2, '0');
hexBuilder.Append(tempString);
}
//return Hex-string to save to DB
return hexBuilder.ToString();
}
private System.Drawing.Image GetImageFromHexString(string hexSting)
{
//Convert Hex-string from DB to byte-array
int length = hexSting.Length;
List<byte> byteList = new List<byte>();
//Take 2 Hex digits at a time
for (int i = 0; i < length; i += 2)
{
byte byteFromHex = Convert.ToByte(hexSting.Substring(i, 2), 16);
byteList.Add(byteFromHex);
}
byte[] byteArray = byteList.ToArray();
//Convert byte-array to image file and return the image
using (MemoryStream stream = new MemoryStream(byteArray))
{
return System.Drawing.Image.FromStream(stream);
}
}
您可以使用JSON.NET库将 byte[] 序列化为字符串,然后将其转换为十六进制。然后在需要时使用相同的库将其反序列化回 byte[]。
我建议您将它作为 byte[] 存储在数据库中,因为它将使用至少两倍的空间作为字符串(十六进制的一个字节是 2 个字符,每个字节至少是 ASCII 或 UTF8 的一个字节)并且有JSON 格式的开销很小。