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 不完全匹配?
最佳答案
我稍微改变了你的代码,现在它可以工作了
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;
}
关于c# - 创建匹配的 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928167/