Windows服务器使用此字节数组创建GUID: -
8 146 96 238 162 223 65 74 134 243 14 158 17 155 23 88
用于根据这些字节生成GUID的代码是构造函数Guid(byte[] b)。
这会生成GUID {ee609208-dfa2-4a41-86f3-0e9e119b1758}
在Qt中,客户端使用移植的.NET source code,它返回一个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的字符串不完全匹配?
答案 0 :(得分:1)
我稍微更改了您的代码,现在可以正常工作
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;
}