创建匹配的GUID

时间:2014-11-14 10:43:43

标签: c# .net c qt 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 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的字符串不完全匹配?

1 个答案:

答案 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;
}