数据类型转换

数据类型转换

STM32中各种格式的长度

  1. Byte:8位 即uint8_t
  2. unsigned short(WORD):16位 即uint16_t
  3. unsigned int(DWORD):32位 即uint32_t
  4. 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 数据里面。这个是要注意的事项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值