首页
注册
登录
tyzual 最近的时间轴更新
tyzual
nullptr
🏢
tencent
V2EX 第 195138 号会员,加入于 2016-10-09 09:16:26 +08:00
tyzual.moe
e-tyzual
tyzual
tyzual
提问
技术话题
好玩
工作信息
交易信息
城市相关
tyzual 最近回复了
2017-04-11 16:22:40 +08:00
回复了
soratadori
创建的主题
›
C++
›
这段 c++代码啥意思?
*(unsigned int*)sample = *((unsigned int*)Buffer+i);
楼主主要是看不懂这句话吧。
按照楼主的说明 Buffer 应该是一个类似于
byte *Buffer 或者 byte Buffer[随便一个什么数字] 的东西。
等号右边先把 Buffer(强行)转成一个 unsigned int *这样的话,后面 + i 就会按照无符号整型来计算偏移量,也就是+i 会向后移动 i * sizeof(unsigned int) 个地址。(否则会向后移动 i * sizeof(byte))。
计算完成偏移量以后,再对这个地址解引用(取值),因为这个时候,地址的类型是 unsigned int *所以此时编译器会把当前地址储存的数据当成一个无符号整形来对待, unsigned int 站四个 byte ,所以编译器会从计算完成的偏移量开始向后读取四个 byte 的内容作为要赋的值。即等号右边的值。
等号左边先把 sample 强行转成了一个 unsigned int *然后在解引用(取值)。因此,解引用完成的时候,等号左边的类型是一个 unsigned int (虽然实际上不是)。因此编译器会把等号右边的值写入到 sample 起始地址到 sample 地址后四个 byte 中。
而 sample 的实际类型是 byte[4],长度正好也是四个 byte 。所以 sample[0] 的值正好就是赋值号右边那个值的最低位 byte 的值, sample[1]是第二低位 byte 的值。以此类推。
2016-10-26 08:44:44 +08:00
回复了
akiossdev
创建的主题
›
小米
›
只有我觉得小米 MIX 好看吗
小米这次真心牛逼了.
»
tyzual 创建的更多回复
关于
·
帮助文档
·
博客
·
API
·
FAQ
·
实用小工具
·
2561 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 11ms ·
UTC 15:33
·
PVG 23:33
·
LAX 07:33
·
JFK 10:33
Developed with
CodeLauncher
♥ Do have faith in what you're doing.