C# 如何将原始二进制值恢复为字符串
我的SQL查询返回如下值C# 如何将原始二进制值恢复为字符串,c#,sql,sql-server,sql-server-2012,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列名 0x0029363354446393642302D333936312D343
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列名
0x0029363354446393642302D333936312D3436
我需要指定一个变量作为我试图转换为
字符串,但我得到不同的值
foreach (DataRow dr in dt.Rows)
{
byte[] bytes = (byte[])dr["ID"];
string strID = Convert.ToBase64String(bytes, 0, bytes.Length);
}
按我的字符串strID持有不同的值,而不是上面的值
告诉我哪里出错了?您正在将字节转换为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();
}
您正在将字节转换为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();
}
strID持有不同的值-也张贴该字符串。dr[ID]和strID中的值是什么?我的strID值是:ACK1MZE4QZFC1C1GOUNCLTQ0在sql中,您看到的是base-16字符串,但在c中,您从db读取字节数组并转换为base-64字符串。为什么期望它们是相同的?首先,在SQL语句中使用NEWID,因此总是创建不同的值。其次,在C语言中,您将转换为base64编码的字符串。因此,对于源字符串和base64编码字符串,您永远不会得到相同的结果。第三,当你给出你的strID时,你似乎转换了一个不同的结果。0x0029363354446393642302D333936312D3436的实际base64值将为ACk2NURGOTZCMC0zOTYxLTQ2。第四,您的varbinary以0x00开头,因此将其转换为字符串将导致以\0终止符开头的字符串。strID持有不同的值-也发布该字符串。您的dr[ID]和strID中的值是什么?我的strID值是:Ack1Mze4QZFcnc1GounctQ0在sql中看到base-16字符串,但在c中,您正在从db读取字节数组并转换为base-64字符串。为什么期望它们是相同的?首先,在SQL语句中使用NEWID,因此总是创建不同的值。其次,在C语言中,您将转换为base64编码的字符串。因此,对于源字符串和base64编码字符串,您永远不会得到相同的结果。第三,当你给出你的strID时,你似乎转换了一个不同的结果。0x0029363354446393642302D333936312D3436的实际base64值将为ACk2NURGOTZCMC0zOTYxLTQ2。第四,varbinary以0x00开头,因此将其转换为字符串将导致字符串以\0终止符开头。