我在 Python 2.7 中编写了一个小应用程序,它比较了一个 MSSQL 和一个 Sqlite 数据库,但我对二进制数据类型(、、、等)有binary
一些varbinary
问题image
。服务器端是一个用 C# 编写的应用程序,它将数据发送到移动设备,但首先将二进制类型转换为十六进制。
例如:
在数据库中有一个具有数据类型的列binary(50)
并存储如下信息:
0x81B5ED7992000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
C# 应用程序使用以下代码将其转换为十六进制:
var sb = new StringBuilder();
sb.Append("'");
byte[] data = Encoding.UTF8.GetBytes(value.ToString());
foreach (byte b in data)
{
sb.Append(string.Format("{0:x2}", b));
}
sb.Append("'");
valuesStringBuilder.Append(sb.ToString());
变量包含以下数据:
value
{byte[50]}
[0]: 129
[1]: 181
[2]: 237
[3]: 121
[4]: 146
[5]: 0
[6]: 0
[7]: 0
[8]: 0
[9]: 0
[10]: 0
[11]: 0
[12]: 0
[13]: 0
[14]: 0
[15]: 0
[16]: 0
[17]: 0
[18]: 0
[19]: 0
[20]: 0
[21]: 0
[22]: 0
[23]: 0
[24]: 0
[25]: 0
[26]: 0
[27]: 0
[28]: 0
[29]: 0
[30]: 0
[31]: 0
[32]: 0
[33]: 0
[34]: 0
[35]: 0
[36]: 0
[37]: 0
[38]: 0
[39]: 0
[40]: 0
[41]: 0
[42]: 0
[43]: 0
[44]: 0
[45]: 0
[46]: 0
[47]: 0
[48]: 0
[49]: 0
value.ToString()
"System.Byte[]"
data
{byte[13]}
[0]: 83
[1]: 121
[2]: 115
[3]: 116
[4]: 101
[5]: 109
[6]: 46
[7]: 66
[8]: 121
[9]: 116
[10]: 101
[11]: 91
[12]: 93
sb
{'53797374656d2e427974655b5d'}
Capacity: 32
Length: 28
MaxCapacity: 2147483647
在我的 python 应用程序中,我使用的是pyodbc库。从 MSSQL 数据库中,我以字节数组的形式获取数据:
bytearray(b'\x81\xb5\xedy\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
从 Sqlite 数据库中,我可以读取为 unicode 字符串:
u'53797374656d2e427974655b5d'
所以我需要将该字节数组转换为与 unicode 字符串完全相同的格式来比较它们。我试图在 Stackoverflow 中找到解决方案,但我总是得到一个与我预期完全不同的字符串。
有人知道我该怎么做吗?