gpt4 book ai didi

endianness - 何时使用 hton/ntoh 以及何时自己转换数据?

转载 作者:行者123 更新时间:2023-12-01 10:49:29 24 4
gpt4 key购买 nike

要从另一台大端机器转换字节数组,我们可以使用:

long long convert(unsigned char data[]) {
long long res;
res = 0;
for( int i=0;i < DATA_SIZE; ++i)
res = (res << 8) + data[i];
return res;
}

如果另一台机器是小端的,我们可以使用
long long convert(unsigned char data[]) {
long long res;
res = 0;
for( int i=DATA_SIZE-1;i >=0 ; --i)
res = (res << 8) + data[i];
return res;
}

为什么我们需要上述功能?我们不应该在发件人处使用 hton 并在接收时使用 ntoh 吗?是因为 hton/nton 是转换整数,而这个 convert() 是用于 char 数组吗?

最佳答案

hton/ntoh函数在网络顺序和主机顺序之间转换。如果这两个相同(即在大端机器上),这些函数什么都不做。因此,不能移植地依赖它们来交换字节序。此外,正如您所指出的,它们仅针对 16 位( htons )和 32 位( htonl )整数定义;您的代码最多可以处理 sizeof(long long)取决于如何DATA_SIZE设置。

关于endianness - 何时使用 hton/ntoh 以及何时自己转换数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996794/

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