Linux 网络基础 C语言常用API 快速翻阅笔记 (字节序篇)


版权声明:
本文为 博主原创文章,遵循 CC 4.0 BY-SA 版权协议

转载请附上原文出处链接和本声明

一、字节序大小端

字节序,就是 大于一个字节类型的数据在内存中的存放顺序。
是在跨平台和网络编程中,时常要考虑的问题。

网络IP地址都是大端模式
网络协议规定接收到得第一个字节是高字节,存放到低地址,所以发送时会首先去低地址取数据的高字节。

1、大小端简介

Alt

  1. Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端
  2. Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端

在网络传输中都是以大端模式来收发数据的(网络字节序)


2、C语言判断大小端

判断大小端的方式有多种,下面我以最简单易懂的方式来判断大小端

int main(int  argc,const char * argv[])
{
    int data = 0X12345678;

    //data 会将其内存中最低地址 1字节数据 赋值给 size
    unsigned char size = (unsigned char *)data;
	
	//data低地址1字节为0x12
    if (size == 0X12)
    {
        printf("大端\n");       
    }

	//data低地址1字节为0x78
    if (size == 0X78)
    {
        printf("小端\n");
    }

    return 0;
}


二、大小端 C语言函数

 - API涉及库  Linux网络编程 - <arpa/inet.h>

1、将十进制数字转成网络字节序

uint16_t htons(uint16_t data)


函数功能:
小端转大端将short类型的整数转成网络字节序(大端)

形参一:uint16_t data:
序号转换的整数(小端)

返回参数:
转换后的网络字节序(大端)


2、将网络字节序转成十进制数字

uint16_t ntohs(uint16_t data)


函数功能:
大端转小端将short类型的整数转成主机字节序(小端)

形参一:uint16_t data:
序号转换的整数(大端)

返回参数:
转换后的网络字节序(小端)


三、IP字符串与网络字节序 C语言函数

 - API涉及库  Linux网络编程 -   
 -      
 		#include <sys/socket.h>
       	#include <netinet/in.h>
       	#include <arpa/inet.h>

1、IP字符串转换成网络字节序

in_addr_t inet_addr(const char *cp)


函数功能:
将cp指向的IP字符串转成网络字节序
注意该函数不能识别255.255.255.255

形参一:const char *cp:
需要转换参数的IP字符串

返回参数:
成功返回 转换好的网络字节序
失败返回 INADDR_NONE


2、网络字节序转换成IP字符串

char *inet_ntoa(struct in_addr in)


函数功能:
将IP网络字节序转换成IP字符串
注意该函数不能识别255.255.255.255

形参一:struct in_addr in
需要转换参数的 IP网络字节序

返回参数:
成功返回 IP字符串首地址
失败返回 NULL

struct in_addr 
{
	//in_addr_t 一般为32位的unsigned int,其字节顺序为网络字节序,即该无符号数采用大端字节序。
    in_addr_t s_addr;
};

表示一个32位的IPv4地址。
其中每8位表示一个IP地址中的一个数值。

四、字符串与整数 C语言函数


1、将字符串转换为int型整数

 - API涉及库  
   #include <stdlib.h>

int atoi(const char *nptr)


函数功能:
将字符串转换为int型

形参一:const char *nptr
需要转换参数的 字符串

返回参数:
转换后的数值

    //将字符串数转换为int整数
    const char ch[] = "520";
    int var = 0;

	//赋值后 变量var = 520
    var = atoi(ch);

	//最终打印结果及为 520
    printf("%d\n",var);

2、int型整数转换字符串

 - API涉及库  
   #include <stdio.h>

int sprintf(char *str, const char *format, ...)


函数功能:
发送格式化输出到 str 所指向的字符串。
任意类型转换成字符串

形参一:char *str
这是指向一个字符数组的指针,该数组存储了 C 字符串。

形参二:format
这是字符串,包含了要被写入到字符串 str 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参中指定的值替换,并按需求进行格式化

返回参数:
成功返回 写入的字符总数,不包括字符串追加在字符串末尾的空字符。
失败返回 一个负数。

    //存放整数转换后的字符串
    const char integer_buf[255];
    int a = 100;
	sprintf(integer_buf,"%d",a);

	//存放浮点数转换后的字符串
    const char floating_buf[255];
    float b = 3.14;
	sprintf(floating_buf,"%s",b);
	
	//存放各自格式化转换后的字符串
    const char temp_buf[255];	
    sprintf(temp_buf,"你好,世界!");

	//最终打印结果
    printf("integer_buf = %s\n",integer_buf);
    printf("floating_buf= %s\n",floating_buf);
    printf("temp_buf = %s\n",temp_buf);

详细使用方法(由菜鸟教程提供>>>)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值