gpt4 book ai didi

c - 通过网络发送 Big Endian 格式的二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:53 25 4
gpt4 key购买 nike

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

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 但 foobar 被加扰,即使 cat 没问题。并且他们期望整数值使用 Big Endian。所以我更改了我的代码来执行此操作:

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));
}

并且声明仍然相同。这怎么可能? Big vs Little endian 是二进制的,如果以前不是,现在应该是。还是上面的逻辑有问题?

最佳答案

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

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

关于c - 通过网络发送 Big Endian 格式的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com