从memcpy返回到双变量

时间:2016-03-03 08:12:46

标签: c char double ascii memcpy

我有一个问题: 我正在使用 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);
        }
    }
}

xpacket[i]..中ASCII字符的双重转换 如何合并数据包内的所有字符(即packet[32....39])以获取pippo的值?

1 个答案:

答案 0 :(得分:2)

要小心,当你在套接字上发送内容时,必须考虑到endianess,否则你可能会得到错误的值。

我建议你使用像&#34; htonl&#34;,&#34; ntohl&#34;这样的功能,因为这样的功能就是这样设计的。

编辑:你的memcpy假设你的双精度是4个八位字节,所以主要是x32位机器。如果您的代码在x64架构上运行,我认为它会失败。抱歉!这是错的。