【c++】13.必须用指针取值的情况.md

有时候我们会弄不清什么时候用指针,什么时候不用指针。我习惯性是不用指针的,因为我自己用不好指针,可能出现某些bug。但是一个合格的程序员,即使不用指针,也应该掌握使用指针的各种用法。
碰到下面这种情况的时候,必须使用指针。

uint8_t obu_buffer_[kBufferSize] = {0};
int length = data_stream_->read(obu_buffer_, kBufferSize, 0);
// 路端传给车端的数据:头 + obuMsg长度 + ObuMsg + 校验和
// 1.头 :2字节 , 0x60,0x61
// 2.obuMsg长度 : 2字节
// 3.ObuMsg :长度视其内容而定
// 4.校验和: 1个字节 ,为前面所有字节的校验和
if (obu_buffer_[0] == 0x60 && obu_buffer_[1] == 0x61) {
std::memset(&v2x_message_, 0, sizeof(v2x_message_));
read_obu_failed_count_ = 0;
uint16_t* obu_length = reinterpret_cast<uint16_t*>(&obu_buffer_[2]);
}

上面的 obu_buffer_[]uint8_t类型,但是通过udp的data_stream_->read(obu_buffer_, kBufferSize, 0);读取后,obu_buffer_被赋值,他的值是连续内存的值。
obu_buffer_[2]obu_buffer_[3]分别为1个字节,连在一起这两个字节的内容组成了 【obuMsg长度 : 2字节】,所以此时我么使用指针的方式uint16_t* obu_length = reinterpret_cast<uint16_t*>(&obu_buffer_[2]);两个uint8_t类型数据的地址组合在一起并reinterpret_cast为uint16_t*,才能获取到obuMsg长度,此时是不能分别通过obu_buffer_[2]这种方式来获取到obuMsg长度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值