我试图通过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));
...
谢谢!
答案 0 :(得分:1)
htole64接受带有主机顺序字节的uint64_t,并将其转换为带有little-endian字节的uint64_t。如果你传递一个double,它将首先被转换为integer64,我认为这不是你想要的。
你可能想做这样的事情:
uint64_t d1 = htole64( *(uint64_t*)(&data1) );
如果违反某些C ++别名规则,我不会感到惊讶。