我需要在MySQL中使用HEX()从数据库中获取数据并使用C#WinForm代码进行处理。二进制字符串需要在C#中解码,是否有等效的UNHEX()函数?
来自MySQL Doc:
对于字符串参数str,HEX()返回十六进制字符串 str的表示,str中每个字符的每个字节 转换为两个十六进制数字。 (因此多字节字符 变成两位数以上。)此操作的反转是 由UNHEX()函数执行。
对于数字参数N,HEX()返回十六进制字符串 N的值表示为longlong(BIGINT) 数。这相当于CONV(N,10,16)。与此相反 操作由CONV(HEX(N),16,10)执行。
的MySQL> SELECT 0x616263,HEX(' abc'),UNHEX(HEX(' abc')); - > ' abc',616263,' abc' MySQL的> SELECT HEX(255),CONV(HEX(255),16,10); - > ' FF',255
答案 0 :(得分:2)
您可以使用此广为人知的SoapHexBinary
类来解析十六进制字符串
string hex = "616263";
var byteArr = System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary.Parse(hex).Value;
var str = Encoding.UTF8.GetString(byteArr);
答案 1 :(得分:1)
从数据库中获取二进制字符串后,您可以" unhex"就这样:
public static string Hex2String(string input)
{
var builder = new StringBuilder();
for(int i = 0; i < input.Length; i+=2){ //throws an exception if not properly formatted
string hexdec = input.Substring(i, 2);
int number = Int32.Parse(hexdec, NumberStyles.HexNumber);
char charToAdd = (char)number;
builder.Append(charToAdd);
}
return builder.ToString();
}
该方法从数字的十六进制格式构建一个字符串,它们的char表示连接到构建器分支。