打印
[应用相关]

【转】数据类型转换

[复制链接]
1140|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
说书先生|  楼主 | 2017-2-27 12:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
数据类型转换

STM32中各种格式的长度

  • Byte:8位 即uint8_t
  • unsigned short(WORD):16位 即uint16_t
  • unsigned int(DWORD):32位 即uint32_t
  • unsigned long: 32位 即uint32_t

下面转换思路,采用联合体结构,利用了联合体的特性,即内部的类型是共享同一个地址的。

1、字节转字

BYTE<—>WORD 8位变16位
定义一个联合体:

typedef union tagW2BY{    WORD wValue; //一个字    BYTE byDst[2]; //两个字节}tagBY2W;void BY2W(BYTE* bySrc, WORD* wDst){    tagBY2W uTag;    //将字节的值复制到Word上     memcpy(uTag.byDst, bySrc, sizeof(WORD));    //输出Word的值    *wDst = uTag.wValue;}void W2BY(WORD wSrc, BYTE* byDst){    tagBY2W uTag;    //将Word的值复制到联合体中    uTag.wValue = wSrc;    //将值通过指针输出    memcpy(byDst, uTag.byDst, sizeof(WORD));}

同理WORD与DWORD转换也使用一个联合体

typedef union tagW2DW{    DWORD dwValue;    WORD  wDst[2];}tagDW2W;

上面的这个这种转换是利用了union里面的各类型的地址一样,但是其中也存在一个问题就是,从WORD、DWORD转换到BYTE中,会受到目标主机的存储格式的影响,譬如在STM32 中,WORD、DWORD的存储是按小段模式存储的,即低地址放数据低位,高地址放数据高位(详看单片机存储中的大小端模式)。这个会反映到BYTE 数据里面。这个是要注意的事项。


沙发
wahahaheihei| | 2017-2-27 16:24 | 只看该作者
BYTE是用的比较多的,很多操作都是以这个为单位。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

191

帖子

0

粉丝