创建匹配的 GUID



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源代码,该代码返回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;
}

相关内容

  • 没有找到相关文章

最新更新