SQL Server convert()函数可以将varbinary数据转换为具有此编码的字符串:
每个二进制字符都转换为两个十六进制字符。如果 转换后的表达式的长度大于data_type 长度它会被截断。
如果data_type是固定大小的字符类型和长度 转换结果小于data_type的长度;空间是 添加到转换后的表达式的右侧以保持均匀 十六进制数字。
字符0x将添加到转换结果的左侧 风格1。
例如,输出可能看起来像'0x389D7156C27AA70F15DD3105484A8461A2268284'。我怎样才能在C#中轻松做同样的事情?即使用相同类型的编码将byte []转换为字符串?
答案 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);
}