我正在尝试将gps坐标打包并解压缩到字符缓冲区中:
我有一个gpscoords结构:
typedef struct {
char north;
uint16_t lat;
uint16_t lat_frac;
char east;
uint16_t lon;
uint16_t lon_frac;
} gpscoords;
如何将gpscoords打包并解压缩到缓冲区变量指向的缓冲区?我希望在打包之前将整数转换为网络顺序,但我在下面做错了:
void pack_gpscoords(gpscoords *pos, char *buffer) {
pack_gpscoords(pos, &buffer);
memcpy(buffer, pos, sizeof(pos)+1);
}
void unpack_gpscoords(gpscoords *pos, char *buffer) {
unpack_gpscoords(pos, &buffer);
memcpy(pos, buffer, sizeof(buffer)+1);
}
答案 0 :(得分:2)
您应该使用字节缓冲区unsigned char
而不是char
。
以下是如何执行此操作的方法:
void pack_gpscoords(gpscoords *pos, unsigned char *buffer) {
buffer[0] = pos->north;
buffer[1] = pos->lat >> 8;
buffer[2] = pos->lat & 255;
buffer[3] = pps->lat_frac >> 8;
buffer[4] = pps->lat_frac & 255;
buffer[5] = pos->east;
buffer[6] = pos->lon >> 8;
buffer[7] = pos->lon & 255;
buffer[8] = pps->lon_frac >> 8;
buffer[9] = pps->lon_frac & 255;
}
void unpack_gpscoords(gpscoords *pos, const unsigned char *buffer) {
pos->north = buffer[0];
pos->lat = (buffer[1] << 8) | buffer[2];
pos->lat_frac = (buffer[3] << 8) | buffer[4];
pos->east = buffer[5];
pos->lon = (buffer[6] << 8) | buffer[7];
pos->lon_frac = (buffer[8] << 8) | buffer[9];
}
注意: