Windows 服务器使用以下字节数组创建一个 GUID:-
8 146 96 238162 223 65 74 134 243 14 158 17 155 23 88
用于基于这些字节生成 GUID 的代码是构造函数 Guid(byte[] b)。
这将生成 GUID {ee609208-dfa2-4a41-86f3-0e9e119b1758}
在Qt中,客户端使用移植的.NET源代码,该代码返回QUuid:-
QUuid GetWindowsGuid(const QByteArray& b)
{
int _a;
short _b;
short _c;
unsigned char _d, _e, _f, _g, _h, _i, _j, _k;
_a = ((int)b[3] << 24) | ((int)b[2] << 16) | ((int)b[1] << 8) | b[0];
_b = (short)(((int)b[5] << 8) | b[4]);
_c = (short)(((int)b[7] << 8) | b[6]);
_d = b[8];
_e = b[9];
_f = b[10];
_g = b[11];
_h = b[12];
_i = b[13];
_j = b[14];
_k = b[15];
QUuid guid(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k);
return guid;
}
使用相同的 16 个字节,这将生成一个 UUid,其字符串为:{ffff9208-ffa2-4a41-86f3-0e9e119b1758}
为什么 Uuid 字符串与 Windows GUID 的字符串不完全匹配?
我稍微改变了你的代码,现在它可以工作了
QUuid GetWindowsGuid(const QByteArray& b)
{
uint _a;
ushort _b;
ushort _c;
uchar _d, _e, _f, _g, _h, _i, _j, _k;
_a = ((uchar)b[3] << 24) | ((uchar)b[2] << 16) | ((uchar)b[1] << 8) | (uchar)b[0];
_b = (((uchar)b[5] << 8) | (uchar)b[4]);
_c = (((uchar)b[7] << 8) | (uchar)b[6]);
_d = b[8];
_e = b[9];
_f = b[10];
_g = b[11];
_h = b[12];
_i = b[13];
_j = b[14];
_k = b[15];
QUuid guid(_a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k);
return guid;
}