网站首页

人工智能P2P分享搜索全网发布信息网站地图标签大全

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

收发通信数据时应统一用unsigned char类型

时间:2023-05-25 11:39

人气:

作者:admin

标签: 数据  收发  通信  时应  统一 

导读:我看有同事用char类型接收,语法上来说char默认是signed char...

1、统一用unsigned char不容易出错。另外在VS里面,有个定义:

//在WINDEF.H中被定义

typedef unsigned char BYTE;

因此上位机有的人用BYTE类型来收发数据也行

2、我看有同事用char类型接收,语法上来说char默认是signed char

我只能说强制类型转换过程是有可能修改内存数据的,虽然实测unsigned char转为signed char不会修改内存数据,只是变量解析方式变了,但是这个习惯不好,比如unsigned char转float就会修改内存数据,当然如果用修改指针类型方式则不会修改内存数据(修改指针类型方式的方式其实是在做内存拷贝)。以下为验证代码:

unsigned char rev_buffer[8] = { 0 };
  memset(rev_buffer,0,8);


  rev_buffer[0] = 0xfe;
  printf("%2x\\r\\n", rev_buffer[0]);
  signed char sc_rev_buffer_temp[8];
  //直接拷贝内存数据。打印signed char类型会出来4个字节是printf函数里面做的
  memcpy(sc_rev_buffer_temp, rev_buffer, 8);
  printf("%x ", sc_rev_buffer_temp[0]);
  printf("%d\\r\\n", sc_rev_buffer_temp[0]);
  //unsigned char强制转换为signed char类型
  sc_rev_buffer_temp[0] = (signed char)rev_buffer[0];
  printf("%x ", sc_rev_buffer_temp[0]);
  printf("%d\\r\\n", sc_rev_buffer_temp[0]);


  float f_rev_buffer_temp;
  unsigned char uf_rev_buffer_temp[8];//辅助打印
  //直接拷贝内存数据
  memcpy(&f_rev_buffer_temp, rev_buffer, 8);
  memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp,8);
  printf("%x ", uf_rev_buffer_temp[0]);
  printf("%d\\r\\n", uf_rev_buffer_temp[0]);
  //用指针操作类型,不会修改内存数据
  f_rev_buffer_temp = *(float*)(&rev_buffer[0]);
  memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp, 8);
  printf("%x ", uf_rev_buffer_temp[0]);
  printf("%d\\r\\n", uf_rev_buffer_temp[0]);
  //用类型强制转换,会修改内存数据
  f_rev_buffer_temp = (float)(*(long long*)(&rev_buffer[0]));
  memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp, 8);
  printf("%x ", uf_rev_buffer_temp[0]);
  printf("%d\\r\\n", uf_rev_buffer_temp[0]);
  getchar();

3、如果收发过程是从buffer里面memcpy拷贝数据的话(用memcpy而不是直接等于),并且后续使用也是按字节拷贝的话,那就无所谓容器的数据类型问题。因为按字节拷贝的话,容器只提供一个首地址,不会改变内存数据

总结规范:收发数据统一用unsigned char类型

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信