htons()和htonl()函数

htons()

#include <arpa/inet.h> 
uint16_t htons(uint16_t hostshort); 
htons的功能:
                        将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)  参数u_short hostshort: 16位无符号整数 返回值:
               TCP / IP网络字节顺序.
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在内存的低字节处。
举个例子:
                假定你的port是  0x1234,  在网络字节序里 这个port放到内存中就应该显示成  addr addr+1  0x12 0x34  而在x86电脑上,0x1234放到内存中实际是:  addr addr+1  0x34 0x12 htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。

htonl()

  简述:  将主机的无符号长整形数转换成网络字节顺序。 
 #include <arpa/inet.h>  
uint32_t htonl(uint32_t hostlong);  
hostlong:主机字节顺序表达的32位数。  
注释:
    本函数将一个32位数从主机字节顺序转换成网络字节顺序。  
返回值: 
       htonl()返回一个网络字节顺序的值。  
参见: 
     htons()ntohl()ntohs().  

时间: 2024-12-18 18:24:00

htons()和htonl()函数的相关文章

htons和htonl函数具体应用

htons和htonl函数,是用来将主机字节顺序转换为网络字节顺序在进行网络抓包时,抓到的包的数据是网络字节顺序,在进行编程时,要进行主机字节顺序和网络字节顺序间的转换.例如:(对一软件进行抓包时,写的一段小程序)ipp2p: if(get_u16(payload,0)==__constant_htons(0x0600)          && get_u32(payload,2)==(plen-6))   {     printk("identifing and datalen

网络与主机字节转换函数:htons ntohs htonl ntohl

网络与主机字节转换函数:htons ntohs htonl ntohl 网络字节序: 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型.操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释.网络字节顺序采用big endian(大端)排序方式. 注:网络字节序转化为主机字节序时,一定要注意是否需要转换.网络字节序是确定的. 大端与小端 大端:低地址存高位 —— 网络字节序/主机字节序 小端:高地址存低位 —— 主机字节序 网络字节序一定是大端的(网络上传输

反汇编windows htonl()函数

因为自己在系统内核写网络程序有时候需要调用htons htonl 这样的函数进行转换,但由于内核只能调用c运行库,别的API不能调用.自己也接触过一点汇编,从来没有去学过.看过老码识途这本书前几章,如是自己反编译试了一下,结果自己还真反出来,对于懂汇编的人确实非常容易. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ULONG myHtonl(ULONG i) {     ULONG eax,edx,ecx;     eax = i;     edx =

htonl()函数学习

今天在网上看到一篇关于htonl()函数的解释,感觉有道理,贴过来大家一起学习! htonl就是把本机字节顺序转化为网络字节顺序 h---host 本地主机 to 就是to 了 n ---net 网络的意思 l 是 unsigned long 所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低地址单元,低位字节存放在高地址单元中).但是计算机的内存存储数据时有可能是大尾顺序或者小尾顺序. 先举个例子: int a = 0x403214; in

htonl()函数详解

在<Linux网络编程>这本书中提到htonl()函数的原型.实现代码如下: long htonl(long value) { return ((value <<24 )|((value<<8)&0x00FF0000)|((value>>8)&0x0000FF00)|(value>>24)); } 函数其实很好理解,就是小端装换成大端,因为网络地址是大端,而正常的网络地址是小端.原理很好理解,一个四个值分别为:(假设value值为

htons和htonl引发的惨案

什么都不说,先抛出问题: 客户端:connect: Connection refused 调试服务器出现以下问题: port:传入的服务器端口号,设置为8888 srvaddr.sin_port:将本地端口号转化为网络端口号后存放在网络套接口地址数据结构中 这里竟然是0! 此处使用的是htonl 这就是死在htons手下的客户端,将客户端与服务器分割在银河的两端 原因:没有注意网络套接口地址数据结构中sin_port的数据类型,以及误以为htonl可以随意替代htons使用 IPV4通用网络套接

htons、htonl与字节序大小端

判断字节序大小端code #include <stdio.h> int main() { if (htons(1) == 1) printf("big endian\n"); else printf("little endian\n"); return 0; } int main() { printf("0x%x\n", htons(0x9225)); printf("0x%x\n", htonl(0x9225))

socket编程为什么需要htons(), ntohl(), ntohs(),htons() 函数

在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" htons()--"Host to Network Short" ntohs()--"Network

转:为什么需要htons(), ntohl(), ntohs(),htons() 函数

为什么需要htons(), ntohl(), ntohs(),htons() 函数: 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题.这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数. 网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long"      ntohl()--"Network to Host Long"      htons()--&quo