首页 > 其他分享 >网络字节序与主机字节序的转换函数实践

网络字节序与主机字节序的转换函数实践

时间:2022-10-09 11:22:47浏览次数:44  
标签:addr 主机 函数 host printf net port 字节

主机字节序
  在不同的CPU处理器下,有不同的字节序类型,而字节序是指整数在内存中存储的顺序叫做主机序。最常见的主机序有两种:

大端存储(Big endian):最高有效位存于最低内存地址处,最低有效位存于最高内存处。(最直观的字节序,即数据位从左到右的顺序按照从低到高顺序写出即为内存地址。

小端存储(Little endian):最高有效位存于最高内存地址处,最低有效位存于最低内存处。(符合人思维的字节序低地址存低位)
如何确定自己的主机是大端序还是小端序

参考代码如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
union
{
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if ( sizeof(short) == 2 )
{
if (un.c[0] == 1 && un.c[1] == 2)
printf("Big-Endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("Little-Endian\n");
else
printf("Unknown\n");
}
else
printf("sizeof(short) = %ld\n", sizeof(short));
exit(0);
}

网络字节序

  网络字节序是TCP/IP中规定好的一种数据表示格式,他与CPU类型,操作系统无关,是可以保证数据在不同主机之间传输能够被正确解释的一种标准,网络字节序是采用大端存储(Big endian)。
  为了实现两个存储方式不同的主机在传输时,需要借助字节序转换函数。

参考代码如下:

#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned short host_port = 0x1234, net_port;
unsigned long host_addr = 0x12345678, net_addr;

net_port = htons(host_port);
net_addr = htonl(host_addr);

printf("Host ordered port: %#x\n", host_port);
printf("Network ordered port: %#x\n", net_port);
printf("Host ordered address: %#lx\n", host_addr);
printf("Network ordered address: %#lx\n", net_addr);
return 0;
}

 

标签:addr,主机,函数,host,printf,net,port,字节
From: https://www.cnblogs.com/any11yan/p/16771476.html

相关文章

  • 网络字节序与主机字节序的转换函数实践
    在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在内存中存储的顺序。比如一......
  • 网络字节序与主机字节序的相互转换
    在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在内存中存储的顺序。比如一个......
  • Smobiler字节小程序开发指南
    Step.1 注册字节开发者,登录字节开发者平台后点击创建小程序(注:需要通过主体验证)。Step.2 点击开发设置,设置webview域名,仅支持https。Step.3 下载安装字节开发工具,选......
  • 网络字节序与主机字节序的转换
    为了进行转换,BSDsocket提供了转换的函数,有下面四个:(BSDSocket是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制)头文件:#inc......
  • PHP 常用函数
    时间http://php.net/manual/zh/ref.datetime.phpdate_default_timezone_get()—取得一个脚本中所有日期时间函数所使用的默认时区date_default_timezone_set()—设定用......
  • Python函数-2V2
    一.导入$$f(x,y)=2x+3y$$上面括号里面的就是数学公式里的自变量,自变量就相当于函数里的参数。二.为什么要有参数如果一个大楼里有两种尺寸不一的窗户,显然......
  • 暑假集训二[LCIS,平凡的函数,那一天她离我而去,矩形]
    暑假集训2LCIS首先我赛时打了个\(n^{4}\)的暴力,因为一个转移的地方忘记加max了,然后拿了\(70\),本来以为改改也就T了结果它加了个\(max\)就\(A\)了.....这数据也是没谁......
  • 生成函数题
    城市规划\[设G(n)表示n个点的有标号无向图数量,我们知道,G(n)=2^{\binom{n}{2}}\\设F(n)表示n个点的有标号无向联通图数量,显然\\\text{我们枚举一号店所在的联通块大小,......
  • 为什么需要拷贝构造函数
    把参数传递给函数有三种方法,一种是传值,一种是传地址,一种是传引用。传值与其他两种方式不同的地方在于当使用传值方式的时候,会在函数里面生成传递参数的一个副本,这个副本......
  • 网络字序与主机字序转换
    1.网络字节序与主机字节序在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。字节序,顾名思义,指字节在......