转换结构来字节和回结构体 [英] Converting struct to byte and back to struct
问题描述
我目前与 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只会工作。 p>
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屋!