我有一个问题: 我正在使用 memcpy (在C中)并在char缓冲区中存储一个double变量。我想要做的是将缓冲区内的char转换回我的初始变量(double)。如果我转换缓冲区的每个位置,我获得 ASCII字符的转换,而不是变量的真实值
我发布我的代码是为了更清楚地解决我的问题:
int counter = 1;
double pippo = 100.0;
const int cPacketSizeInBytes = 40;
char packet[cPacketSizeInBytes];
do
{
.....;
.....;
memcpy(&packet[32], (char*)&pippo, sizeof(double));
serverSocket.Send((char*)&packet, cPacketSizeInBytes);
pippo += 3.0;
if ( pippo > 180.0 ) pippo = 0.0;
counter++;
if(!(counter%100))
{
printf("Pippo value (double) is : %f\n", pippo);
for (int i = 32; i < 40; i ++) {
printf("%c\n", packet[i]);
double x = (double)packet[i];
printf("%f\n", x);
}
}
}
x
是packet[i]..
中ASCII字符的双重转换
如何合并数据包内的所有字符(即packet[32....39]
)以获取pippo
的值?
答案 0 :(得分:2)
要小心,当你在套接字上发送内容时,必须考虑到endianess,否则你可能会得到错误的值。
我建议你使用像&#34; htonl&#34;,&#34; ntohl&#34;这样的功能,因为这样的功能就是这样设计的。
编辑:你的memcpy假设你的双精度是4个八位字节,所以主要是x32位机器。如果您的代码在x64架构上运行,我认为它会失败。抱歉!这是错的。