将双精度转换并连接成字节数组

时间:2014-07-31 18:43:57

标签: c++ tcp double bytearray

我试图通过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));
...

谢谢!

1 个答案:

答案 0 :(得分:1)

htole64接受带有主机顺序字节的uint64_t,并将其转换为带有little-endian字节的uint64_t。如果你传递一个double,它将首先被转换为integer64,我认为这不是你想要的。

你可能想做这样的事情:

uint64_t d1 = htole64( *(uint64_t*)(&data1) );

如果违反某些C ++别名规则,我不会感到惊讶。