幽声 - 小endian/big endian的混乱[英] Confusion in htons- little endian/ big endian

本文是小编为大家收集整理的关于幽声 - 小endian/big endian的混乱的处理方法,想解了幽声 - 小endian/big endian的混乱的问题怎么解决?幽声 - 小endian/big endian的混乱问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

当我通过套接字从一个进程发送一个整数变量,然后在接收到的末端打印值时,该值仍然相同,而无需使用ntohl/htonl,那么除初始化以外,我需要在哪里使用这些功能插座结构.我了解Litte/Big Endian.但是,当值保持不变时,为什么我们需要将端口和IP编号转换为主机/网络字节订单.请详细说明整数是如何通过网络转换的?

推荐答案

如果您希望您的程序变得可移植,那么每当您在网络上发送大于1个字节的整数时,都必须首先使用htons或htonl>,并且接收计算机必须使用ntohs或ntohl.

在您的情况下,该值仍然相同的原因可能是因为发送计算机和接收计算机具有相同的endianness.换句话说,发送计算机和您正在使用的接收计算机都是小endian(或大型Endian,无论情况如何.)

但是,如果您希望您的程序便于便携,则不能依靠它永远是这种情况.例如,有一天,发送计算机可能是Intel X86,并且接收可能是Sun Sparc,然后如果您不使用htons.

,您的程序将失败.

其他推荐答案

如果要将数据从X86或AMD64机器发送到带有PowerPC处理器的计算机,则在 binary 格式中,您会很快看到您的数据遇到了" Nuxi问题"随着不同的处理器的处理方式,整数也有所不同,并且似乎交换字节. (他们实际上并没有交换字节 - 他们只是以不同的顺序与他们合作.)

在X86或AMD64上工作时,最不重要的字节首先出现在内存中(这样,您可以从较低到更高的内存地址进行添加). PowerPC将最有意义的字节放在内存中(这样您就可以基于内存中较早的字节对数字进行排序 - 字符串排序和整数排序可以完全相同.)

其他推荐答案

它也相同,因为在您的体系结构上,网络顺序与本机订单相同.如果您从不预计为另一个体系结构编译代码,则可以省略HTON/NTOH的电话.然后,您的代码将无法移植.

本文地址:https://www.itbaoku.cn/post/359221.html