如何使用.NET将byte []转换为字符串以生成与SQL Server转换格式1或2相同的字符串?

时间:2011-10-29 16:26:20

标签: c# .net sql-server encoding

SQL Server convert()函数可以将varbinary数据转换为具有此编码的字符串:

  

每个二进制字符都转换为两个十六进制字符。如果   转换后的表达式的长度大于data_type   长度它会被截断。

     

如果data_type是固定大小的字符类型和长度   转换结果小于data_type的长度;空间是   添加到转换后的表达式的右侧以保持均匀   十六进制数字。

     

字符0x将添加到转换结果的左侧   风格1。

例如,输出可能看起来像'0x389D7156C27AA70F15DD3105484A8461A2268284'。我怎样才能在C#中轻松做同样的事情?即使用相同类型的编码将byte []转换为字符串?

2 个答案:

答案 0 :(得分:7)

您可以使用BitConverter.ToString()并删除它用作分隔符的连字符:

"0x" + BitConverter.ToString(bytes).Replace("-", "")

或者您可以使用LINQ和string.Concat()。 .Net 4版本:

"0x" + string.Concat(bytes.Select(b => b.ToString("X2")))

在.Net 3.5中,您必须添加ToArray()

"0x" + string.Concat(bytes.Select(b => b.ToString("X2")).ToArray())

这不遵循关于截断和添加空格的规范,但我不确定您是否需要。并且应该很容易修改代码来做到这一点。

这两个版本都是可读性和性能第二。如果您需要非常快,可以使用StringBuilder并手动添加格式化的字节。

答案 1 :(得分:0)

在C#中使用十六进制格式:

string Result;
foreach(byte b in data)
{
    Result += String.Format("{0:00X}", b);
}