今天又遇到了一个问题,用java保存的二进制double类型的数据,按照大端字节顺序保存为二进制,使用C++还原回double数据的时候,发现数据不一致了,查阅资料之后,发现C++不支持直接读取大端字节顺序,需要交换一下位置,遂写了个函数,把小端字节顺序独到的数转换成大端字节顺序的数:
double swapEndian(double val) {
union {
double d;
uint8_t bytes[sizeof(double)];
} u;
u.d = val;
std::swap(u.bytes[0], u.bytes[7]);
std::swap(u.bytes[1], u.bytes[6]);
std::swap(u.bytes[2], u.bytes[5]);
std::swap(u.bytes[3], u.bytes[4]);
return u.d;
}