被迫使用c++,查找百度一下午写出了这个东西.希望能帮忙解惑
我写了一个代码如下
#include <iostream>
double * disp11(unsigned char *rev)
{
/*
*
*/
union gyro
{
char ch[4];
float f;
int si;
};
union gyro Gyrox[4], Gyroy[4], Gyroz[4];
unsigned short int data_temp1;
int i, j;
double angleRT[16];
unsigned short int YearMonth; //年
unsigned short int Product_ID_T; //产品编号
i = 2;
Product_ID_T = rev[2] + rev[3] * 256; //产品编号
YearMonth = rev[4] + rev[5] * 256; //年
i = 11;
j = 0;
Gyrox[0].ch[0] = rev[i++]; //经度
Gyrox[0].ch[1] = rev[i++];
Gyrox[0].ch[2] = rev[i++];
Gyrox[0].ch[3] = rev[i++];
angleRT[0] = Gyrox[0].f;
i = 15;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //纬度
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[1] = Gyrox[0].f;
i = 19;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //高度,m
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[2] = Gyrox[0].f;
i = 23;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //航向
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[3] = Gyrox[0].f;
i = 27;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //步数
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[4] = Gyrox[0].f;
//步幅度,低字节
data_temp1 = rev[32] * 256 + rev[31];
angleRT[5] =(double)data_temp1;
angleRT[6] =(double)rev[33]; //卫星数
angleRT[7]= (double)rev[34]; //状态字1
angleRT[8] = (double)rev[35]; //状态字2
angleRT[9] = (double)Product_ID_T; //状态字2
angleRT[10]=(double)YearMonth;//年
angleRT[11]=(double)rev[6];//月
angleRT[12]=(double)rev[7];//日
angleRT[13]=(double)rev[8];//时
angleRT[14]=(double)rev[9];//分
angleRT[15]=(double)rev[10];//秒
return angleRT;
}
using namespace std;
int main()
{
// AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF
// 假如test = [AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF]
// cout disp11(test)
return 0;
}
功能函数我按照逻辑写出来了,但是我不知道如何运行它,也不知道如何添加头文件让他可以运行,测试数据在注释第一行,,按照函数的入口类型定义后传给函数,最后打印函数返回值
代码调了一下,可以运行了。
这是运行结果:
代码如下:
#include <iostream>
double * disp11(unsigned char *rev)
{
/*
*
*/
union gyro
{
char ch[4];
float f;
int si;
};
union gyro Gyrox[4], Gyroy[4], Gyroz[4];
unsigned short int data_temp1;
int i, j;
double* angleRT = new double[16];
unsigned short int YearMonth; //年
unsigned short int Product_ID_T; //产品编号
i = 2;
Product_ID_T = rev[2] + rev[3] * 256; //产品编号
YearMonth = rev[4] + rev[5] * 256; //年
i = 11;
j = 0;
Gyrox[0].ch[0] = rev[i++]; //经度
Gyrox[0].ch[1] = rev[i++];
Gyrox[0].ch[2] = rev[i++];
Gyrox[0].ch[3] = rev[i++];
angleRT[0] = Gyrox[0].f;
i = 15;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //纬度
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[1] = Gyrox[0].f;
i = 19;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //高度,m
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[2] = Gyrox[0].f;
i = 23;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //航向
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[3] = Gyrox[0].f;
i = 27;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //步数
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[4] = Gyrox[0].f;
//步幅度,低字节
data_temp1 = rev[32] * 256 + rev[31];
angleRT[5] = (double)data_temp1;
angleRT[6] = (double)rev[33]; //卫星数
angleRT[7] = (double)rev[34]; //状态字1
angleRT[8] = (double)rev[35]; //状态字2
angleRT[9] = (double)Product_ID_T; //状态字2
angleRT[10] = (double)YearMonth;//年
angleRT[11] = (double)rev[6];//月
angleRT[12] = (double)rev[7];//日
angleRT[13] = (double)rev[8];//时
angleRT[14] = (double)rev[9];//分
angleRT[15] = (double)rev[10];//秒
return angleRT;
}
using namespace std;
int main()
{
// AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF
// 假如test = [AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF]
unsigned char test[] = { 0xAA, 0x55, 0xAD, 0x02, 0xBC, 0x08, 0x01, 0x06, 0x08, 0x00, 0x00, 0x08, 0x33, 0xD6, 0x42, 0xF0, 0x97, 0xEF, 0x41, 0x24, 0x18, 0xB7, 0x43, 0xEF, 0x69, 0x56, 0x43, 0x00, 0x00, 0x50, 0x41, 0xA8, 0x02, 0x00, 0x00, 0x01, 0xEF };
// cout disp11(test)
double* angleRT = disp11(test);
printf("%f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n", angleRT[0], angleRT[1], angleRT[2], angleRT[3],
angleRT[4], angleRT[5], angleRT[6], angleRT[7], angleRT[8], angleRT[9], angleRT[10], angleRT[11], angleRT[12], angleRT[13], angleRT[14], angleRT[15]);
delete[] angleRT;
system("pause");
return 0;
}
我需要的效果修改这个函数或者这个代码,让其能够运行,disp11函数不能动.其他的都可以动,如果头文件有错误可以修改.最后我下班后没有c++运行环境,提交回答的时候需要附上运行截图.谢谢
如果不报错的话把头文件改成#include<bits/stdc++.h>
angleRT是固定长度吗?
如果固定长16的话试试这样:
#include <iostream>
#include<string>
using namespace std;
double * disp11(string rev)
{
/*
*
*/
union gyro
{
char ch[4];
float f;
int si;
};
union gyro Gyrox[4], Gyroy[4], Gyroz[4];
unsigned short int data_temp1;
int i, j;
double angleRT[16];
unsigned short int YearMonth; //年
unsigned short int Product_ID_T; //产品编号
i = 2;
Product_ID_T = rev[2] + rev[3] * 256; //产品编号
YearMonth = rev[4] + rev[5] * 256; //年
i = 11;
j = 0;
Gyrox[0].ch[0] = rev[i++]; //经度
Gyrox[0].ch[1] = rev[i++];
Gyrox[0].ch[2] = rev[i++];
Gyrox[0].ch[3] = rev[i++];
angleRT[0] = Gyrox[0].f;
i = 15;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //纬度
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[1] = Gyrox[0].f;
i = 19;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //高度,m
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[2] = Gyrox[0].f;
i = 23;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //航向
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[3] = Gyrox[0].f;
i = 27;
j = 0;
Gyrox[0].ch[j++] = rev[i++]; //步数
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
Gyrox[0].ch[j++] = rev[i++];
angleRT[4] = Gyrox[0].f;
//步幅度,低字节
data_temp1 = rev[32] * 256 + rev[31];
angleRT[5] = (double)data_temp1;
angleRT[6] = (double)rev[33]; //卫星数
angleRT[7] = (double)rev[34]; //状态字1
angleRT[8] = (double)rev[35]; //状态字2
angleRT[9] = (double)Product_ID_T; //状态字2
angleRT[10] = (double)YearMonth;//年
angleRT[11] = (double)rev[6];//月
angleRT[12] = (double)rev[7];//日
angleRT[13] = (double)rev[8];//时
angleRT[14] = (double)rev[9];//分
angleRT[15] = (double)rev[10];//秒
return angleRT;
}
using namespace std;
int main()
{
// AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF
// 假如test = [AA 55 AD 02 BC 08 01 06 08 00 00 08 33 D6 42 F0 97 EF 41 24 18 B7 43 EF 69 56 43 00 00 50 41 A8 02 00 00 01 EF]
// cout disp11(test)
string rev = "AA55AD02BC0801060800000833D642F097EF412418B743EF69564300005041A802000001EF";
double *test = disp11(rev);
for (size_t i = 0; i < 16; ++i) {
cout << test[i] << " ";
}
cout << endl;
system("pause");
return 0;
}