c# - 如何将原始二进制值恢复为字符串
问题描述
我的 SQL 查询返回值如下
Declare @ID varbinary(18)
Declare @newReturnID NvarCHAR(100)
set @ID = CONVERT(VARBINARY(18), CONVERT(VARCHAR(2), CONVERT(VARBINARY(2), 41)) + CONVERT(VARCHAR(64), NEWID()))
select @ID ID
ID(列名)
0x002936354446393642302D333936312D3436
我需要分配一个变量作为我试图转换为字符串的上述值,但我得到一个不同的值?
foreach (DataRow dr in dt.Rows)
{
byte[] bytes = (byte[])dr["ID"];
string strID = Convert.ToBase64String(bytes, 0, bytes.Length);
}
通过我的字符串 strID 持有不同的值,而不是上面那个?
让我知道我哪里出错了?
解决方案
您正在将 Bytes 转换为 Base64 字符串,而 0x002.. 是字节的十六进制表示。
如果在c#代码中转换字符串不是强制的,请尝试在SQL select语句中选择转换字符串。
select convert(varchar(max), @ID, 1) as ID
请参阅此链接(二进制样式)以获取有关Convert
.
编辑:
此外,在 c# 中,您需要将字节数组转换为十六进制字符串。这里是已经可用的答案,可以将字节数组转换为十六进制字符串。从该链接发布的一个功能。
public static string ByteArrayToString(byte[] ba)
{
StringBuilder hex = new StringBuilder(ba.Length * 2);
foreach (byte b in ba)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}