gpt4 book ai didi

用于将任意结构从主机字节顺序转换为网络字节顺序的 C 函数?

转载 作者:行者123 更新时间:2023-11-30 14:56:31 24 4
gpt4 key购买 nike

我创建了一个函数my_hton()将主机字节顺序的数据转换为网络字节顺序。它转换任何任意结构的对象。如果正确的话,为什么C有类似htons()这样的函数和htonl()它分别只转换 2 和 4 个字节,而不是为所有数据类型提供一个函数,还是我遗漏了一些东西?

void my_hton(char *buffer, char *p, size_t i){
if( is_little_endian() ){
while(i > 0){
*buffer = p[i-1];
buffer++;
i--;
}
}
}

struct demo{
int a;
char b;
char str[100];
float f;
double d;
int *ptr;
};

int main() {
char buffer[10000] = "";
struct demo object;

/*
* object initialization
*/

my_hton(buffer, (char*) &object, sizeof(object));

return 0;
}

最佳答案

您在代码中所做的操作是按字节翻转整个结构,这会导致您的各个成员出现乱码。

更好的问题是为什么要转换整个结构的字节序?

更改单个整数类型字段的字节序是有意义的,但这需要有关字段的信息,因此您不能拥有通用函数。

另一方面,如果您的结构具有固定大小的元素且填充相等,那么您可以编写一个通用函数来转换每个字段的字节序。但我相信大多数为网络制作的结构都是打包的,这种情况非常罕见。

关于用于将任意结构从主机字节顺序转换为网络字节顺序的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627731/

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