指针赋值

代码如下:

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类型对应的内存中的数据完整取出来。

posted on 2008-05-04 22:00  sizzle  阅读(562)  评论(0编辑  收藏  举报