zoukankan      html  css  js  c++  java
  • GUID(Globally Unique Identifier)全局唯一标识符

            最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++。 但发现由于字段是char类型,数据库对其进行了排序。再次插入数据时,末尾已经不再是最后一次插入的数据了。项目组其他人说,使用GUID,windows留有一个产生GUID的接口,可以产生GUID码,我们之后可以把得到的GUID转为我们使用的vchar。
            下面来介绍一下GUID,GUID中文被称为全局唯一标识符。是一种由算法生成的二进制长度为128位数字,转换为字符为32位字符串。在一个计算机中,基本不可能产生相同的GUID码,因为在其算法中加入了时间因素,以保证重复的情况不会发生。

            GUID码广泛的应用在许多产品中,如注册表,接口标识,数据库、系统目录等。

    GUID组成:
    1. typedef struct _GUID {
    2. unsigned long Data1;
    3. unsigned short Data2;
    4. unsigned short Data3;
    5. unsigned char Data4[ 8 ];
    6. } GUID;
    可以看到GUID定义是一个结构体。

    生成GUID接口,windows API:
    1. ::CoCreateGuid(&guid)

    下面给出具体生成GUID码的代码:
    1. const char* newGUID()
    2. {
    3. static char buf[64] = {0};
    4. GUID guid;
    5. if (S_OK == ::CoCreateGuid(&guid))
    6. {
    7. _snprintf(buf, sizeof(buf)
    8. , "{%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X}"
    9. , guid.Data1
    10. , guid.Data2
    11. , guid.Data3
    12. , guid.Data4[0], guid.Data4[1]
    13. , guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
    14. , guid.Data4[6], guid.Data4[7]
    15. );
    16. }
    17. return (const char*)buf;
    18. }






  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/chengkeke/p/5417341.html
Copyright © 2011-2022 走看看