惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
Blog — PlanetScale
Blog — PlanetScale
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
博客园_首页
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
腾讯CDC
罗磊的独立博客
IT之家
IT之家
I
InfoQ
V
V2EX
博客园 - 叶小钗
A
About on SuperTechFans
Y
Y Combinator Blog
C
Check Point Blog
量子位
Martin Fowler
Martin Fowler
Vercel News
Vercel News

博客园 - sizzle

ruby函数回调的实现方法 软件单元测试之我见 非空判断 在COM中使用数组参数-SafeArray[转载] 进程的深度隐藏 文件隐藏 Windows下网络数据报的监听和拦截技术 三键屏蔽 键盘知识 如何获取当前程序文件的路径 Net Remoting[转自Bruce Zhang's Blog] 解码 XML 和 DTD 【读书笔记】[Effective C++第3版][第27条]尽量不要使用类型转换 P2P之UDP穿透NAT的原理与实现 CommandBinding用法 窗体显示中Form.Show()和Form.ShowDialog()的区别 一段高深代码--未解 使用C#注销/关闭计算机 TEA加密算法的C/C++实现
指针赋值 - sizzle - 博客园
sizzle · 2008-05-04 · via 博客园 - sizzle

代码如下:

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