C/C++ —— 小端转大端函数的使用

本文详细介绍了在不同操作系统环境下(Windows与Linux)进行字节序转换的函数,包括htonl、ntohl、htons、ntohs等,并提供了具体的使用示例。同时,文章还解释了大端与小端模式的概念,帮助读者更好地理解字节序转换的重要性。
摘要由CSDN通过智能技术生成

函数说明

uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
/*
h表示host,n表示network,l表示32位长整数,s表示16位短整数。
如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是大端字节序,这些函数不做转换,将参数原封不动地返回。
*/

windows下

如果是VS,包含头文件及ws2_32.lib库

#include <winsock.h> 
#pragma comment(lib, "ws2_32.lib")

如果是QtCreator,包含头文件及ws2_32.lib

.pro中:

LIBS += -LC:\Users\HHT\Desktop\serialPort\ -lWS2_32

其中,C:\Users\HHT\Desktop\serialPort\ 是ws2_32.lib所在路径。

cpp文件:

#include <winsock.h>

测试代码:

	unsigned short test1 = htons(0xffee);
	cout << 0xffee << endl;
	cout << test1 << endl;//转换后为0xeeff
	unsigned int test2 = htonl(0xaaeeeeee);
	cout << 0xaaeeeeee << endl;
	cout << test2 << endl;//转换后为0xeeeeeeaa


Linux(Ubuntu)下

在QtCreator中测试

头文件

#include <arpa/inet.h>

测试代码:

    qDebug()<<"htons:"<<htons(0xffee);
    qDebug()<<"htonl:"<<htonl(0xaaeeeeee);

判断系统种变量高\低字节在前

    #include <stdio.h>
    #include <memory.h> 
    void main()
    {
        int a=10;
        short b;
        memcpy(&b,&a,2);
        printf("%d\n",b);
    }

参考

大端模式和小端模式

发送到串口的数据,串口接收是相反的?

详解C语言的htons函数

大小端及网络字节序

字节顺序的问题(高位在前&低位在前)

如何判断变量在内存中如何放置的?低位在前还是高位在前

高低字节序转换(htonl、ntohl、 htons、ntohs函数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHT0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值