我的数据库中有一个表示图像的字符串。它看起来像这样:
0x89504E470D0A1A0A0000000D49484452000000F00000014008020000000D8A66040....
<truncated for brevity>
当我从数据库加载它时,它以byte []的形式出现。我如何自己将字符串值转换为字节数组。 (我正在尝试删除db以获取一些测试代码。)
答案 0 :(得分:3)
class Program
{
static void Main()
{
byte[] bytes = StringToByteArray("89504E470D0A1A0A0000000D49484452000000");
}
public static byte[] StringToByteArray(string hex)
{
int length = hex.Length;
byte[] bytes = new byte[length / 2];
for (int i = 0; i < length; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
}
答案 1 :(得分:2)
听起来你问的是如何将具有特定编码的字符串转换为字节数组。
如果是这样,它取决于字符串的编码方式。例如,如果你有一个base64编码的字符串,那么你可以使用:
获得一个字节数组asBytes = System.Text.Encoding.UTF8.GetBytes(someString);
如果编码是十六进制的(因为它似乎在你的例子中),BCL中没有任何内置,但是you could use LINQ(首先删除字符串头部的0x
):
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length).
Where(x => 0 == x % 2).
Select(x => Convert.ToByte(hex.SubString(x,2), 16)).
ToArray();
}
答案 2 :(得分:2)
我相信你实际上是在尝试将十六进制数字转换为字节数组。
如果是这样,你可以这样做:(首先删除0x
)
var bytes = new byte[str.Length / 2];
for(int i = 0; i < str.Length; i += 2)
bytes[i / 2] = Convert.ToByte(str.Substring(i, 2), 16);
(测试)
答案 3 :(得分:1)
如果它以byte[]
形式出现,则它不是字符串。
列数据类型是什么? VARBINARY?
答案 4 :(得分:1)
String
表示“文本” - 字节数组存在根本区别,不存在1:1映射(就像其他复杂的.NET类型一样)。
特别是,字符串以适当的字符编码编码。如已经发布的那样,给定文本可以被解码成期望的字节表示。在您的特定情况下,看起来好像您有一个单独的字节表示为填充的十六进制数字,即每个字节是两个字符宽:
int bytelength = (str.Length - 2) / 2;
byte[] result = new byte[byteLength]; // Take care of leading "0x"
for (int i = 0; i < byteLength; i++)
result[i] = Convert.ToByte(str.Substring(i * 2 + 2, 2), 16);
答案 5 :(得分:0)
字符串到C#中的字节数组转换
http://www.chilkatsoft.com/faq/dotnetstrtobytes.html