当我将uint8_t *转换为整数时会发生什么?

时间:2018-11-27 21:15:23

标签: c++

我一直在记录一些数字,但是已经证实它们是错误的。但是,它们看起来并不是随机的,我对旧数字到底在做什么?

uint8_t * m_rawValue

// The way I recently learned was wrong
return (uint16_t)*m_rawValue;
// The correct way
uint16_t* a = (uint16_t*)m_rawValue;
return a[0];

1 个答案:

答案 0 :(得分:-2)

您之前在做什么:

  • 重定向uint8_t *数组-这将导致一个临时的uint8_t值,该值代表数组的第一个字节
  • 将结果投射到uint16_t并将其返回。
  • 最后,您将返回m_rawValue指向的第一个字节的值。

你在做什么?

  • 将uint8_t *指针投射到uint16_t *指针-此 告诉编译器将a的值视为指向一堆2字节的指针 整数(uint16_t*而不是指向一堆1字节的指针 整数(uint8_t*
  • 将m_rawValue指向的前两个字节作为uint16_t返回

所做的假设:

  • 实际上m_rawValue 指向有效uint16_t值的缓冲区。由于您说更改后可以得到正确的价值,因此这似乎是一个安全的假设。

编辑以明确我的假设。