tyzual's recent timeline updates
tyzual

tyzual

nullptr
🏢  tencent
V2EX member #195138, joined on 2016-10-09 09:16:26 +08:00
tyzual's recent replies
Apr 11, 2017
Replied to a topic by 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 的值。以此类推。
Oct 26, 2016
Replied to a topic by akiossdev 小米 只有我觉得小米 MIX 好看吗
小米这次真心牛逼了.
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1132 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 23:13 · PVG 07:13 · LAX 16:13 · JFK 19:13
♥ Do have faith in what you're doing.