1

我以前在多播这样的东西:

struct Message
{
    char     cat[3];
    uint64_t foo;
    uint16_t bar;
} __attribute((packed));

Message MESSAGE;

int main(void)
{
    //every now and then
    memcpy(MESSAGE.cat, bla, 3);
    MESSAGE.foo = varA;
    MESSAGE.bar = varB - varC;

    sendto(fd, &MESSAGE, sizeof(MESSAGE), 0, &sockAddr, sizeof(sockAddr));
}

接收方声称他们会收到 MESSAGE 但即使没问题也会被foo打乱。并且他们期望 Big Endian 的积分值。所以我改变了我的代码来做到这一点:barcat

int main(void)
{
    //every now and then
    memcpy(MESSAGE.cat, bla, 3);
    MESSAGE.foo = bswap_64(varA);
    MESSAGE.bar = varB - varC;
    MESSAGE.bar = bswap_16(MESSAGE.bar);

    sendto(fd, &MESSAGE, sizeof(MESSAGE), 0, &sockAddr, sizeof(sockAddr));
}

并且索赔仍然相同。这怎么可能?大端与小端是二进制的,如果不是以前应该是现在的话。还是上面的逻辑有问题?

4

2 回答 2

1

您需要查找http://linux.die.net/man/3/ntohl

将事物转换为网络秩序,然后重构。

于 2013-07-03T20:33:20.767 回答
0

在发送之前尝试将数据包保存到文件中 - 这样您就可以检查它。

于 2013-07-02T21:06:58.803 回答