本文主要介绍大整数的分析和用例的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。
解释这里前面遇到的LARGE_INTEGER结构。与可能的误解不同,64位数据并不一定要在64位操作系统下使用。在VC中,64位数据的类型是__int64。定义是这样写的:
__int64文件偏移量
上面定义的变量被命名为file_offset,因为文件中的偏移量是使用64位数据的常见情况。同时,文件大小也是如此(回想一下上一节中定义的文件大小)。32位数据无符号整数只能表示为4GB。众所周知,现在4GB以上的文件绝对不少见。但实际上type __int64很少用在驱动开发中。基本上用的是一个常用体:LARGE_INTEGER。该公共机构的定义如下:
typedef _ _ int64 LONGLONG
typedef union _LARGE_INTEGER {
结构{
ULONG LowPart
长高音部分;
};
结构{
ULONG LowPart
长高音部分;
} u;
龙龙QuadPart
} LARGE _ INTEGER
这个公共体的方便之处在于,它可以很容易地获得高32位、低32位和整个64位。执行运算和比较时,请使用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 . high part);
}
上面的代码演示了这个结构的一般用法。在实际编程中,大量的参数都是LARGE_INTEGER类型。
在驱动程序的开发中,我们可以使用LONGLONG,表示64位结构的数据。还可以使用一个名为LARGE_INTEGER的数据结构来表示64位数据。其定义如下
typedef union _LARGE_INTEGER {
结构{
ULONG LowPart
长高音部分;
} DUMMYSTRUCTNAME
结构{
ULONG LowPart
长高音部分;
} u;
# endif//MIDL _通行证
龙龙QuadPart
} LARGE _ INTEGER
LARGE_INTEGER是一个财团。设计很巧妙。联合体中的三个元素可以认为是LARGE_INTEGER的三个定义。
(1)DUMMYSTRUCTNAME由两部分组成。一个是低阶32位整数LowPart。另一个是高阶整数。在小端的情况下。首先是低32位。高32位在后面。
如果给这个64位整数赋值100,可以这样写
LARGE_INTEGER值;
价值。LowPart=100
价值。high part=0;
(2)u由两部分组成。一个是低阶32位整数LowPart。另一个是高阶整数。在大端的情况下。前32位数字在前。低32位在后面。
如果给这个64位整数赋值100,可以这样写
LARGE_INTEGER值;
value . u . low part=100;
value . u . high part=0;
(3)当LARGE_INTEGER等价于LONGLONG时。如果给这个64位整数赋值100,可以这样写
LARGE_INTEGER值;
价值。QuadPart=100
关于large _ integer的分析和用例的这篇文章到此为止。有关large _ integer的分析和使用的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。