c - 从 memcpy 返回到双变量

标签 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 的值?

最佳答案

请注意,当您在套接字上发送内容时,必须考虑字节顺序,否则您可能会得到错误的值。

我建议你使用像“htonl”、“ntohl”这样的函数,因为这样的函数就是为此而设计的。

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

关于c - 从 memcpy 返回到双变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35766568/

相关文章:

char数组,为什么我必须 "dereference"单个字符的字符串来给它赋值

c++ - Const unsigned char* 到 char*

c# - 如何检查 C# 中的数字是否可整除?

c - C代码的实时linting

python - 为 Python 模块编译 C 代码时出现问题

c++ - 2个类似typedef定义的差异

C 指针,向链表的 HEAD 插入元素

java - 将字符串解析为字符?

JAVA:分割字符串以获得 double 值

c# - 在 C# 中比较 double 值