c++ - 使用指针访问结构体的各个字节

标签 c++ pointers struct

我有一个应用程序,需要对结构执行 CRC 操作。我认为实现此目的的最佳方法是简单地迭代构成该结构的所有单个字节并将它们添加到 CRC 例程中。 strict 名为 Config,类型为 ConfigT。下面的代码大致描述了我想要做的事情,我只需要了解使用指针算术访问结构体字节的语法即可。

 uint16_t CalculateEepromChecksum()
 {
  uint16_t crc = 0;
  uint8_t *ptr = &Config;

   for (uint32_t i = 0; i < sizeof(ConfigT); i++)
   {
            crc = _crc16_update(crc, ptr[i]);
   }

    return crc;
  }

此函数编译失败:

 cannot convert 'ConfigT*' to 'uint8_t* {aka unsigned char*}' in initialization

...在以下行:

 uint8_t *ptr = &Config;

最佳答案

您需要将 crc 的地址传递给 _crc16_update 才能对其进行修改。如果不这样做,并且这不是编译错误,那么您最多只能期待未定义的行为。

_crc16_update(&crc, *(ptr+i));

此外,您可以在 struct 字节数组上使用数组表示法,而不是指针表示法。两种形式的工作方式相同,但是,第一种形式可能更好地表明您正在使用字节数组:

  _crc16_update(&crc, ptr[i]);

关于c++ - 使用指针访问结构体的各个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21213663/

相关文章:

c++ - 有没有办法在头文件中声明一个指针并在.cpp 中实例化它?

c - argv 指向指针数组的指针

c# - 匿名类型的非只读替代

oop - 如何强制将struct中的所有字段像OOP中的构造器一样填充?

c++ - 如何保留 'first' 和 'second' 用 struct 替换 std::pair ?

c++ - 在 C++ 中使用 auto 的最简单示例是什么?

c - 将指针分配给指针

c++ - 并发问题 : how to have only one thread go through critical section

c++ - OpenGL 包装器中的 Alpha/纹理问题

c++ - boost::posix_time::ptime 是固定大小的吗?