转换结构来字节和回结构体 [英] Converting struct to byte and back to struct

查看:192
本文介绍了转换结构来字节和回结构体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前与 Arduino的乌诺 s工作,9DOFs和的的XBee s,而我试图创建一个可以通过串口发送一个结构,逐字节,然后重新构建成一个结构。

到目前为止,我有以下的code:

 结构AMG_ANGLES {
    浮动偏航;
    浮间距;
    浮动辊;
};诠释主(){
    AMG_ANGLES struct_data;    struct_data.yaw = 87.96;
    struct_data.pitch = -114.58;
    struct_data.roll = 100.50;    字符*数据=新的char [sizeof的(struct_data)];    为(unsigned int类型I = 0; I<的sizeof(struct_data);我++){
        // COUT<< (字符*)(&放大器; struct_data + I)&所述;&下; ENDL;
        数据[I] =(字符*)(安培; struct_data + I); //存放结构的字节数组。
    }    AMG_ANGLES * TMP =(AMG_ANGLES *)的数据; //重新进行结构
    COUT<< tmp.yaw; //显示偏航,看它是否是正确的。
}

来源: HTTP://$c$cpad.org/xMgxGY9Q

这code似乎没有工作,我不知道我做错了。

我该如何解决这个问题?


解决方案

看来我已经解决了我的问题有以下code。

 结构AMG_ANGLES {
    浮动偏航;
    浮间距;
    浮动辊;
};诠释主(){
    AMG_ANGLES struct_data;    struct_data.yaw = 87.96;
    struct_data.pitch = -114.58;
    struct_data.roll = 100.50;    //发送端
    焦B〔的sizeof(struct_data)];
    的memcpy(B,&安培; struct_data,sizeof的(struct_data));    //接收端
    AMG_ANGLES TMP; //重新进行结构
    的memcpy(安培; TMP,B的sizeof(TMP));
    COUT<< tmp.yaw; //显示偏航,看它是否是正确的
}

警告:如果发送和使用相同的架构收到此code只会工作

I'm currently working with Arduino Unos, 9DOFs, and XBees, and I was trying to create a struct that could be sent over serial, byte by byte, and then re-constructed into a struct.

So far I have the following code:

struct AMG_ANGLES {
    float yaw;
    float pitch;
    float roll;
};

int main() {
    AMG_ANGLES struct_data;

    struct_data.yaw = 87.96;
    struct_data.pitch = -114.58;
    struct_data.roll = 100.50;

    char* data = new char[sizeof(struct_data)];

    for(unsigned int i = 0; i<sizeof(struct_data); i++){
        // cout << (char*)(&struct_data+i) << endl;
        data[i] = (char*)(&struct_data+i); //Store the bytes of the struct to an array.
    }

    AMG_ANGLES* tmp = (AMG_ANGLES*)data; //Re-make the struct
    cout << tmp.yaw; //Display the yaw to see if it's correct.
}

Source: http://codepad.org/xMgxGY9Q

This code doesn't seem to work, and I'm not sure what I'm doing wrong.

How do I solve this?

解决方案

It seems I've solved my issue with the following code.

struct AMG_ANGLES {
    float yaw;
    float pitch;
    float roll;
};

int main() {
    AMG_ANGLES struct_data;

    struct_data.yaw = 87.96;
    struct_data.pitch = -114.58;
    struct_data.roll = 100.50;

    //Sending Side
    char b[sizeof(struct_data)];
    memcpy(b, &struct_data, sizeof(struct_data));

    //Receiving Side
    AMG_ANGLES tmp; //Re-make the struct
    memcpy(&tmp, b, sizeof(tmp));
    cout << tmp.yaw; //Display the yaw to see if it's correct
}

WARNING: This code will only work if sending and receiving are using the same endian architecture.

这篇关于转换结构来字节和回结构体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆