如何将原始二进制值恢复为字符串

时间:2018-05-30 07:53:29

标签: c# sql sql-server sql-server-2012

我的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保存不同的值,而不是上面的那个?

让我知道我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您正在将字节转换为Base64字符串,而0x002 ..是字节的十六进制表示。

如果在c#代码中转换字符串不是必须的,请尝试在SQL select语句中选择转换字符串。

select convert(varchar(max), @ID, 1) as  ID

请参阅此链接(Binary Style),了解Convert中第3个参数的详细信息。

修改

此外,在c#中,您需要将字节数组转换为十六进制字符串。 here已经可用于将字节数组转换为十六进制字符串。 从该链接发布一个功能。

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();
}