在数据帧的发送中,一般是将数据类型拆分成数组发送,如float拆为长度为4的数组,这个过程称为编码。数组被tcp、udp、串口发送给接收端,接收端将长度为4的数组后将组合成float数据,这个过程叫解码。
这种数据类型的转换,一般在帧的编码和解码中经常使用,使用中需要注意数据的大小端。
现在使用模板函数方式实现上述内容,即数据类型不限于float,也可以是int、double、结构体、甚至可以为类。
1、解码:数组转数据类型
template<typename T >
T decodeValue(char * data, int len){
T var;
int vlen = sizeof(T);
if(vlen>len){
return var;
}
char * dicp = (char *)&var;
memcpy(dicp, data, vlen);
return var;
}
2、编码:数据类型转数组
template<typename T >
bool encodeValue(T val, char * data, int len){
int vlen = sizeof(T);
if(vlen>len){
return false;
}
char * dicp = (char *)&val;
memcpy(data, dicp, vlen);
}
可查看其他文章:利用联合体进行数据类型转换