首页 > 解决方案 > 如何将原始二进制值恢复为字符串

问题描述

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

让我知道我哪里出错了?

标签: c#sqlsql-serversql-server-2012

解决方案


您正在将 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();
}

推荐阅读