关于指针的指针,以及存储

1.LauchGetCRC16()会算出一个值,应该是16位的。
2.Buffer[8]取地址知道什么意思,前面加个是什么意思,最前面又加个是什么意思?
3. LauchGetCRC16()得出的值是0xBD1B,为什么低位0x1B放在Buffer[8],把高位0xBD放在Buffer[9]呢?不应该高八位放在Buffer[8]吗,低八位放在Buffer[9]吗?

代码如图

img

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

  1. LauchGetCRC16() 函数返回的是一个 unsigned short 类型的值,也就是 16 位无符号整数。

  2. &Buffer[8] 表示取 Buffer 数组中第 8 个元素的地址,也就是 &Buffer[0] 加上 8 个元素的偏移量,即 &Buffer[0] + 8,其中 & 表示取地址运算符。这里可以使用数组名和下标的方式来访问数组元素的地址,也可以使用指针的方式,例如 Buffer + 8

  3. LauchGetCRC16() 函数中,函数返回值的高八位和低八位被存储在 Buffer 数组中的第 9 个元素和第 8 个元素中。这是因为在 x86 架构的计算机中,内存地址是按照小端(little-endian)方式存储的,即低位字节存放在低地址处,高位字节存放在高地址处。因此,在将一个 16 位整数存储到内存中时,先存储低位字节,后存储高位字节。在这个例子中,0xBD1B 的低八位是 0x1B,高八位是 0xBD,因此先将低八位存储到 Buffer[8] 中,再将高八位存储到 Buffer[9] 中。在读取这个 16 位整数时,需要先读取 Buffer[8] 中的低八位,再读取 Buffer[9] 中的高八位,再将它们合并成一个 16 位整数。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

1.((uint16)&Buffer[8])的意思是将传递过来的16位的数据,分别存在Buffer[8]和Buffer[9];因为Buffer[8]是uint8的数组,如果将16位的数据直接给Buffer会导致高8位丢失。采用以上格式先获得Buffer[8]的地址,将该地址转换为16位指针,再得到该指针指向的16位空间,即Buffer[8]和Buffer[9].
2.因此系统默认会是小端模式,因此会将低8位放入Buffer[8],高8位放入Buffer[9]。
如有疑问,可以私聊哈`

什么前面加一个后面加一个

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:
    1. 函数LauchGetCRC16()所算出的16位值是CRC校验码,它是一种用于检验数据传输或者存储是否出现错误的校验和,以保证数据的完整性。它的类型为uint16_t,即无符号16位整型。
    2. Buffer[8]表示数组Buffer的第9个元素,即下标为8的元素;而&Buffer[8]表示数组Buffer中第9个元素的地址。它们的不同在于,Buffer[8]是访问了数组中的元素,而&Buffer[8]是访问了该元素的地址。它们的意义和用法取决于具体的函数实现,有可能是为了提高代码的可读性或者方便使用指针进行操作。
    3. 将计算出的16位CRC校验码拆分为高8位和低8位,并分别存储在Buffer[9]和Buffer[8]中,是为了方便后续使用这些数据。可能是因为需要将这些数据传输出去或者进行其他处理。在实际应用中,对于16位以上的数据,需要将其拆分为多个字节进行处理。拆分后的高低位数据的存储顺序取决于具体的硬件平台和软件实现。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^