溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中LARGE_INTEGER解析與使用的示例分析

發(fā)布時(shí)間:2021-08-30 09:29:16 來源:億速云 閱讀:474 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C++中LARGE_INTEGER解析與使用的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

這里解釋前面碰到的LARGE_INTEGER結(jié)構(gòu)。與可能的誤解不同,64位數(shù)據(jù)并非要在64位操作系統(tǒng)下才能使用。在VC中,64位數(shù)據(jù)的類型為__int64。定義寫法如下:

    __int64 file_offset

    上面之所以定義的變量名為file_offset,是因?yàn)槲募械钠屏渴且环N常見的要使用64位數(shù)據(jù)的情況。同時(shí),文件的大小也是如此(回憶上一小節(jié)中定義的文件大?。?。32位數(shù)據(jù)無符號(hào)整型只能表示到4GB。而眾所周知,現(xiàn)在超過4GB的文件絕對(duì)不罕見了。但是實(shí)際上__int64這個(gè)類型在驅(qū)動(dòng)開發(fā)中很少被使用?;旧媳皇褂玫降氖且粋€(gè)共用體:LARGE_INTEGER。這個(gè)共用體定義如下:

typedef __int64 LONGLONG;  

    typedef union _LARGE_INTEGER {
        struct {
            ULONG LowPart;

            LONG HighPart;

        };

        struct {
            ULONG LowPart;

            LONG HighPart;

        } u;

        LONGLONG QuadPart;

    } LARGE_INTEGER;

    這個(gè)共用體的方便之處在于,既可以很方便的得到高32位,低32位,也可以方便的得到整個(gè)64位。進(jìn)行運(yùn)算和比較的時(shí)候,使用QuadPart即可。

LARGE_INTEGER a,b;

    a.QuadPart = 100;

    a.QuadPart *= 100;

    b.QuadPart = a.QuadPart;

    if(b.QuadPart > 1000)

    {
        KdPrint(“b.QuadPart < 1000, LowPart = %x HighPart = %x”, b.LowPart,b.HighPart);

    }

    上面這段代碼演示了這種結(jié)構(gòu)的一般用法。在實(shí)際編程中,會(huì)碰到大量的參數(shù)是LARGE_INTEGER類型的。

驅(qū)動(dòng)開發(fā)中,我們除了可以使用LONGLONG這個(gè)表示64位結(jié)構(gòu)的數(shù)據(jù)外。還可以使用一個(gè)叫做LARGE_INTEGER的數(shù)據(jù)結(jié)構(gòu)來表示64位數(shù)據(jù)。它的定義如下

typedef union _LARGE_INTEGER {  
    struct {  
        ULONG LowPart;  
        LONG HighPart;  
    } DUMMYSTRUCTNAME;  
    struct {  
        ULONG LowPart;  
        LONG HighPart;  
    } u;  
#endif //MIDL_PASS  
    LONGLONG QuadPart;  
} LARGE_INTEGER;

LARGE_INTEGER是一個(gè)聯(lián)合體。設(shè)計(jì)的非常巧妙。聯(lián)合體中的3個(gè)元素可以被認(rèn)為是LARGE_INTEGER的3個(gè)定義

(1)DUMMYSTRUCTNAME由2部分組成。一個(gè)是低位的32位整數(shù)LowPart。另一個(gè)就是高位的整數(shù)咯。在小端的情況下。低32位數(shù)字在前。高32位在后。

如果將這個(gè)64位整數(shù)賦值100.可以這么寫

LARGE_INTEGER value;  
value.LowPart = 100;  
value.HighPart = 0;

(2)u由2部分組成。一個(gè)是低位的32位整數(shù)LowPart。另一個(gè)就是高位的整數(shù)咯。在大端的情況下。高32位數(shù)字在前。低32位在后。

如果將這個(gè)64位整數(shù)賦值100.可以這么寫

LARGE_INTEGER value;  
value.u.LowPart = 100;  
value.u.HighPart = 0;

(3)當(dāng)LARGE_INTEGER 等價(jià)于LONGLONG的時(shí)候。如果將這個(gè)64位整數(shù)賦值100.可以這么寫

LARGE_INTEGER value;  
value.QuadPart = 100;

關(guān)于“C++中LARGE_INTEGER解析與使用的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI