美文网首页
拆分组合字节

拆分组合字节

作者: guanjianhe | 来源:发表于2018-01-22 11:20 被阅读0次

在单片机中,和上位机通讯一般是用串口。如果要发送一个数据123.4,有两种方法:

  1. 把123.4转化为数据串,也就是“123.4”,然后再通过串口一个字节一个字节发送。
  2. 把浮点型数据拆分成一个个单字符,然后通过串口发送到上位机,最后再在上位机组合,例子如下。
#include <stdio.h>
#include <string.h>

#define BYTE0(dwTemp)       ( *( (char *)(&dwTemp)    ) )
#define BYTE1(dwTemp)       ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp)       ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp)       ( *( (char *)(&dwTemp) + 3) )



union Test
{
    char carr[4];
    float fdata;
};

int main(void)
{
    union Test test;
    float f=123.4f;
    char *pf;
    char num1[4],num2[4],num3[4],num4[4],num5[4];
    int i;
    float f1,f2,f3,f4,f5;
    /* 浮点数拆分成多字节数据 */
    //第一种方法
    test.fdata = f;
    for(i=0;i<4;i++)
    {
        num1[i] = test.carr[i];
    }
    
    //第二种方法
    num2[0] = BYTE0(f);
    num2[1] = BYTE1(f);
    num2[2] = BYTE2(f);
    num2[3] = BYTE3(f);

    //第三种方法
    pf=(char *)(&f);
    for(i=0;i<4;i++)
    {
        num3[i]=*(pf+i);
    }
    //第四种方法
    memcpy(num4,&f,sizeof(char)*4);
    //第五种方法
    (*((float *)num5)) = f; 

    

    for(i=0;i<4;i++)
    {
        printf("num1=%X\tnum2=%X\tnum3=%X\tnum4=%X\tnum5=%X\n",num1[i]&0xFF,num2[i]&0xFF,num3[i]&0xFF,num4[i]&0xFF,num5[i]&0xFF);
    }

    /* 多字节数据合成一个浮点数 */
    //第一种方法
    for(i=0;i<4;i++)
    {
        test.carr[i]=num1[i];
    }
    f1 = test.fdata;


    //第二种方法
    BYTE0(f2) = num2[0];
    BYTE1(f2) = num2[1];
    BYTE2(f2) = num2[2];
    BYTE3(f2) = num2[3];

    //第三种方法
    pf = (char *)(&f3);
    for(i=0;i<4;i++)
    {
        *(pf+i) = num3[i];
    }

    //第四种方法
    memcpy(&f4,num4,sizeof(char)*4);
    //第五种方法
    f5 = (*((float *)num5));

    printf("\nf1=%f\tf2=%f\tf3=%f\tf4=%f\tf5=%f\n",f1,f2,f3,f4,f5);

    return 0;
}

/***********************************************************************************
num1=CD num2=CD num3=CD num4=CD num5=CD
num1=CC num2=CC num3=CC num4=CC num5=CC
num1=F6 num2=F6 num3=F6 num4=F6 num5=F6
num1=42 num2=42 num3=42 num4=42 num5=42

f1=123.400002   f2=123.400002   f3=123.400002   f4=123.400002   f5=123.400002
***********************************************************************************/

相关文章

  • 拆分组合字节

    在单片机中,和上位机通讯一般是用串口。如果要发送一个数据123.4,有两种方法: 把123.4转化为数据串,也就是...

  • 史上最全的ASM原理解析与应用

    ASM简介 ASM是一个操作Java字节码类库,其操作的对象是字节码数据,处理字节码方式是“拆分-修改-合并”将....

  • Lesson 14

    Phonics: 学习内容: 课本 P21 Lesson 14,学习拆分音节(将组合的音素拆分开来),学习读连音(...

  • php数组合并,拆分,替换,组合

    php数组的操作(合并,拆分,删除,排序) 1. 合并数组 array_merge ( array $array1...

  • 组合创新 = 拆分基本元素 + 组合

    读《第二曲线创新》之战略篇 战略篇分为组合创新,单一要素,战略杠杆三部分来讲。第三部分对于现在的我还没法吸收,第一...

  • 面向接口编程

    前面回顾 在拆分最小的粒度的时候,如果不能拆分了,用共同的方法,可以用继承,如果还能拆分,我们可以用组合的方式,用...

  • 手绘1

    收获: 元素的拆分、组合: ①布尔运算 几个合并形状的运算 ②复杂元素拆分简化至基本元素 渐变: ①射线渐变和路径...

  • 内存地址

    内存的基本单元是一个字节。 可以1个字节存储一个元素----字节型的整数或字符(ASCII码) 也可以2个字节组合...

  • UE4 基于节点的剧情对话系统

    一 、对于剧情对话我们拆分成各种命令的组合 a、对话 b、显示立绘

  • 神奇的布尔运算

    图形布尔运算的定义 通过图形的联合、组合、拆分、相交、剪除等操作,使简单的基本图形组合产生新的形体。

网友评论

      本文标题:拆分组合字节

      本文链接:https://www.haomeiwen.com/subject/rohlaxtx.html