我的表格中有图像数据类型。当我使用SQL Server Management Studio进行查询时,我在结果窗口中得到以下内容,包括网格和文本。
0x255044462D312E320D0A0D0A332030206F [截断长度]
我试图在一个小小的c#程序中复制它。
然而,当我使用SqlCommand或LINQ时,我得到输出: JVBERi0xLjINCg0KMyAwIG9iag0KPDwNCi9FIDIxODgyDQovSCBbIDExNTAgMTUxIF0NCi9MIDIyM [TRUNCATED]
有什么想法,我需要做什么才能显示0x25 ...输出?我尝试过byte []转换和编码,但似乎找不到合适的。
如果我不清楚,请告诉我。
编辑: 我不是要显示图像,只是显示0x25 ......
思想?
答案 0 :(得分:4)
string forDisplay = "0x" + BitConverter.ToString(yourByteArray).Replace("-", "");
答案 1 :(得分:1)
AFAIK,。Net不包含任何将任意字节数组作为单个十六进制数打印的方法。 (直到.Net 4.0的System.Numerics.BigInteger
)
但是,您应该能够写
"0x" + BitConverter.ToString(bytes).Replace("-", "")
请注意,这是非常低效的;如果你想在实际代码中执行此操作,请在循环中使用 StringBuilder
。
编辑:像这样:
public static string ToHexString(this byte[] bytes) {
var builder = new StringBuilder(bytes.Length * 2 + 2);
builder.Append("0x");
for (int i = 0; i < bytes.Length; i++)
builder.Append(bytes[i].ToString("X2"));
return builder.ToString();
}
击> <击> 撞击> 2 nd 编辑:这是一个真正更快的新版本。 (是的,我知道你不需要它;无论如何它都在这里)
private static char ToHexDigit(int i) {
if (i < 10)
return (char)(i + '0');
return (char)(i - 10 + 'A');
}
public static string ToHexString(byte[] bytes) {
var chars = new char[bytes.Length * 2 + 2];
chars[0] = '0';
chars[1] = 'x';
for (int i = 0; i < bytes.Length; i++) {
chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
}
return new string(chars);
}