我以前在多播这样的东西:
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 的积分值。所以我改变了我的代码来做到这一点:bar
cat
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));
}
并且索赔仍然相同。这怎么可能?大端与小端是二进制的,如果不是以前应该是现在的话。还是上面的逻辑有问题?