我正在尝试通过TCP网络发送double类型的各种数据,并希望将所有这些数据转换为单个字节数组。有什么建议也可以解决字节顺序的差异吗?
这是我尝试过的方法,但是正确的值未存储在数组中:
// Byte-array
char buf[MAX_SIZE];
// Data
double data1, data2, data3, ... ;
// Convert and store all data
uint64_t d1 = htole64(data1);
memcpy(buf, &d1, sizeof(d1));
uint64_t d2 = htole64(data2);
memcpy(buf+8, &d2, sizeof(d2));
uint64_t d3 = htole64(data3);
memcpy(buf+16, &d3, sizeof(d3));
...
谢谢!
最佳答案
htole64采用具有主机顺序字节的uint64_t并将其转换为具有小尾数字节的uint64_t。如果传递双精度数,它将首先转换为integer64,我认为这不是您想要的。
您可能想要执行以下操作:
uint64_t d1 = htole64( *(uint64_t*)(&data1) );
尽管如果违反某些C ++别名规则,我不会感到惊讶。