代码如下:
LONGLONG llValue;
BYTE* pbValue;
HRESULT hr = GetValue("Value", &pbValue);
if (SUCCESSED(hr))
{
llValue = (LONGLONG)(*pbValue);
}
执行之后发现获得的llValue值比理论值小很多,经过分析发现犯了个弱智的错误:
———对指针pbValue先取值后转换类型
pbValue是BYTE型指针,取值后将pbValue指向的内存中一字节数据取出,然后类型转换时实际是将该一字节数据通过补0填充成LONGLONG类型(即获得的llValue中只有一字节是内存中的数据,其余都是填充的0)。
正确的赋值方式应该是:
llValue = *(LONGLONG*)pbValue;
即先类型转换,再赋值。只有这样才能将LONGLONG类型对应的内存中的数据完整取出来。