gpt4 book ai didi

c - 理解下面一行

转载 作者:太空宇宙 更新时间:2023-11-04 06:39:00 27 4
gpt4 key购买 nike

我在库中阅读了这段代码,该库用于将位图 (.bmp) 显示到 LCD。
我真的很难理解以下几行中发生的什么,以及它是如何发生的。

也许有人可以向我解释一下。

uint16_t s, w, h;
uint8_t* buffer; // does get malloc'd

s = *((uint16_t*)&buffer[0]);
w = *((uint16_t*)&buffer[18]);
h = *((uint16_t*)&buffer[22]);

我想这对于一个真正的 C 程序员来说并不难,但我还在学习,所以我想我只是问问 :)
据我了解,它以某种方式将两个 uint8_t 变量粘在一起成为一个 uint16_t

在此先感谢您的帮助!

最佳答案

在您提供的代码中,读取buffer(字节数组),并将值提取到swh

(uint16_t*)&buffer[n] 语法意味着您正在提取 buffer 的第 nth 字节的地址,并将其转换为 uint16_t*。转换告诉编译器查看此地址,就好像指向一个 uint16_t一对 uint8_t
代码中的附加 * 取消引用指针,从此地址中提取值。由于地址现在指向 uint16_t,因此提取了 uint16_t 值。

结果:

  1. s 获取第一个 uint16_t 的值,字节 0 和 1。
  2. w获取第十个uint16_t的值,第18和19字节。
  3. h获取第十二个uint16_t的值,第22和23字节。

关于c - 理解下面一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com