字節序轉換htonl,Linux---主機字節序與網絡字節序

 2023-10-15 阅读 28 评论 0

摘要:現在的CPU累加器一次能夠裝載至少4個字節的一個整數,那么字節在內存中的排列順序不同,導致累加器使用的結果不同,這就是字節序問題 。 例如: 我們存儲一個int類型的數字;int a = 1; 主機字節序分為兩種: 大端字節序 整數的高位

現在的CPU累加器一次能夠裝載至少4個字節的一個整數,那么字節在內存中的排列順序不同,導致累加器使用的結果不同,這就是字節序問題 。
例如:
我們存儲一個int類型的數字;int a = 1;
在這里插入圖片描述
主機字節序分為兩種:

  1. 大端字節序
    整數的高位字節存放在內存的低地址位。
    在這里插入圖片描述
  2. 小端字節序
    整數的低位字節存放在內存地址的低地址為。
    在這里插入圖片描述
    測試主機為大端還是小端
#include<stdio.h>void Test()
{union myunion{short a;char b[2];}test;test.a = 0x0102;if(b[0] == 1 && b[1] == 2)printf("大端\n");else if(b[0] == 2 && b[1] == 1)printf("小端\n");elseprintf("未知\n");
}

字節序轉換htonl。由于不同主機之間的字節序存儲方式不同,這就導致,如果發送方與接收方主機字節序存儲方式不同,所以在通信時,需要先將主機字節序進行統一,這就是主機字節序裝換為網絡字節序。

#include<netinet/in.h>
//長整型主機字節序轉換為網絡字節序
unsigned long int htonl(unsigned long int hostlong);//短整型主機字節序轉換為網絡字節序
unsigned short int htons(unsigned short int hostshort);//長整形網絡字節序裝換為主機字節序
unsigned long int ntohl(unsigned long int hostlong);//短整形網絡字節序裝換為主機字節序
unsigned short int ntohs(unsigned short int hostshort);

注意:長整型通常是用于轉換IP地址,短整型主要轉換端口號。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/140474.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息