1. 程式人生 > >模擬htonl、ntohl、htons、ntohs函式實現

模擬htonl、ntohl、htons、ntohs函式實現

From: http://wxxweb.blog.163.com | Author: wxxweb | E-Mail: [email protected]
本文可任意轉載,但請註明原文出處 今天在如鵬網裡討論htonl、ntohl在不同機器的區別,特意模擬了htonl、ntohl、htons、ntohs函式實現。
實現如下:

typedef unsigned short int uint16;

typedef unsigned long int uint32;

// 短整型大小端互換

#define BigLittleSwap16(A)  ((((uint16)(A) & 0xff00) >> 8) | \

                                                 (((uint16)(A) & 0x00ff) << 8))

// 長整型大小端互換

#define BigLittleSwap32(A)  ((((uint32)(A) & 0xff000000) >> 24) | \

                                                 (((uint32)(A) & 0x00ff0000) >> 8) | \

                                                 (((uint32)(A) & 0x0000ff00) << 8) | \

                                                 (((uint32)(A) & 0x000000ff) << 24))

// 本機大端返回1,小端返回0

int checkCPUendian()

{

       union{

              unsigned long int i;

              unsigned char s[4];

       }c;

       c.i = 0x12345678;

       return (0x12 == c.s[0]);

}

// 模擬htonl函式,本機位元組序轉網路位元組序

unsigned long int HtoNl(unsigned long int h)

{

       // 若本機為大端,與網路位元組序同,直接返回

       // 若本機為小端,轉換成大端再返回

       return checkCPUendian() ? h : BigLittleSwap32(h);

}

// 模擬ntohl函式,網路位元組序轉本機位元組序

unsigned long int NtoHl(unsigned long int n)

{

       // 若本機為大端,與網路位元組序同,直接返回

       // 若本機為小端,網路資料轉換成小端再返回

       return checkCPUendian() ? n : BigLittleSwap32(n);

}

// 模擬htons函式,本機位元組序轉網路位元組序

unsigned short int HtoNs(unsigned short int h)

{

       // 若本機為大端,與網路位元組序同,直接返回

       // 若本機為小端,轉換成大端再返回

       return checkCPUendian() ? h : BigLittleSwap16(h);

}

// 模擬ntohs函式,網路位元組序轉本機位元組序

unsigned short int NtoHs(unsigned short int n)

{

       // 若本機為大端,與網路位元組序同,直接返回

       // 若本機為小端,網路資料轉換成小端再返回

       return checkCPUendian() ? n : BigLittleSwap16(n);

}


相關推薦

模擬htonlntohlhtonsntohs函式實現

From: http://wxxweb.blog.163.com | Author: wxxweb | E-Mail: [email protected] 本文可任意轉載,但請註明原文出處 今天在如鵬網裡討論htonl、ntohl在不同機器的區別,特意模擬了htonl、ntohl、htons、n

IP地址格式轉換(htonlntohl;inet_addrinet_ntoa)

1、htonl ()和ntohl( ) u_long PASCAL FAR ntohl (u_long netlong); u_short PASCAL FAR ntohs (u_short netshort); ntohl( )-----網路順序轉換成主機順序 u_lo

使用巨集模擬htonlntohlhtonsntohs實現

typedef unsigned short int uint16;typedef unsigned long int uint32;// 短整型大小端互換#define BigLittleSwap16(A)        ((((uint16)(A) & 0xff0

位元組序大小端轉換模擬htonshtonlntohsntohl

大端模式:一個多位元組資料的高位元組在前,低位元組在後,以資料 0x1234ABCD 看例子: 低地址 ---------------------> 高地址 +-+

巧記:htonlhtonsntohlntohs

uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);具體

主機位元組序與網路位元組序的轉換函式htonlntohlhtonsntohs

Part 1: htons函式具體解釋      在Linux和Windows網路程式設計時需要用到htons和htonl函式,用來將主機位元組順序轉換為網路位元組順序。      在Intel機器下,執行以下程式 int main() ...{    printf(

網路程式設計:htonshtonlntohsntohl簡析

/******************************************************************************************************************說明:htons、htonl、ntohs、n

htonshtonl與字節序大小端

col pre pri color main spa 16bit ets sts 判斷字節序大小端code #include <stdio.h> int main() { if (htons(1) == 1) printf("big

HTTP模擬工具【C#/Winform源碼】Json綁定TreeView控件使用了MetroModernUIRestSharpDapper.NetNewtonsoft.JsonSmartThreadPool這幾個主要開源框架

type form num -m 請求 resource dap bool dev HTTP模擬工具 開發語言:C#/Winform開發工具:Visual Studio 2017數據庫: SQLite使用框架:界面-MetroModernUI

有關推挽輸出開漏輸出復用開漏輸出復用推挽輸出以及上拉輸入下拉輸入浮空輸入模擬輸入區別——(轉載)

應用 以及 連接數 17. 推拉 情況 輸出 floating 補充 最近在看數據手冊的時候,發現在Cortex-M3裏,對於GPIO的配置種類有8種之多: (1)GPIO_Mode_AIN 模擬輸入(2)GPIO_Mode_IN_FLOATING 浮空輸入(3)GPIO_

MongoDB分片群集(實現分片服務啟用分片服務管理單點故障模擬

Opens 取數 page use chmod 組成 壓力 多個 clu MongoDB分片概述 1、什麽是分片 高數據量和吞吐量的數據庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤

charles 模擬手機弱網修改請求引數修改返回值

1、charles模擬弱網(斷網)           2、charles修改請求引數 (1)先訪問一次需要改的請求,在charles上找到相應的請求地址 (2)然後在需要打斷點的請求上右鍵,勾選【Breakpoints】 建議在需要

javaSE (三十二)找出字串中重複的元素並寫入檔案模擬正版軟體使用次數期限獲取資料夾下的全部java檔案

1、找出字串中重複的元素並寫入檔案: 問題:鍵入(或者從一個檔案中讀取)一個字串,找出字串中重複的元素並寫入檔案 思路: 鍵入字串 map儲存 寫入檔案 程式碼: package cn.njupt; /* * * 鍵入一串字元,計算每個字元出

POST請求模擬工具JSON請求工具http介面測試post介面測試

地址: apiDebug-API介面除錯外掛,開源API介面除錯外掛,Restfull介面除錯軟體,Restfull介面除錯外掛,谷歌API介面除錯外掛,Chrome瀏覽器介面除錯外掛,POST請求模擬外掛,api介面除錯工具,開源介面除錯工具,POST模擬工具

Java模擬最短作業優先時間片輪轉最高響應比三種程序排程演算法

本次試驗是使用程式來模擬作業系統中程序排程的三種不同的排程策略,分別為最短作業有限、時間片輪轉、最高響應比。 模擬的情況下,程序數為8,程序所需執行時間為隨機產生的整數,單位為1S,預設程序同時到達。 以下是實驗的程式碼: Process.java是測試類,用於生成程序列表

關於模擬登陸的小結-抓包cookiesession和token

概述 上個星期根據bcloud寫了個Java版本的登陸專案。其實本來時想做個Linux的百度雲登陸軟體,但是做到獲取bdstoken的時候出了問題解決不了。後來我把bcloud專案下了下來用發現也有問題,應該是百度登陸的過程有了一些改動。通過 web抓包找到一些線索,

C語言模擬實現strncpystrncpystrncatstrstr和strrstr函式實現

以下是我用C語言模擬實現的部分字串函式: 1、strncpy函式的實現 #include<stdio.h> #include<assert.h> #include<

有關上拉輸入下了輸入推輓輸出開漏輸出複用開漏輸出複用推輓輸出以及浮空輸入模擬輸入區別

1、上拉輸入:上拉就是把電位拉高,比如拉到Vcc。上拉就是將不確定的訊號通過一個電阻嵌位在高電平!電阻同時起限流作用!弱強只是上拉電阻的阻值不同,沒有什麼嚴格區分。   2、下拉輸入:就是把電壓拉低,拉到GND。與上拉原理相似。   3、浮空輸入:浮空(float

設計模擬工藝加工優化開發交流 · 行業軟體二次開發優化技術

Dr. Ing. 白途思(Begtostudy) 微訊號:Begtostudy QQ:370566617 Email: [email protected] 點選這裡給我發郵件 工作單位:上海航天技術研究院 身份:上海交通大學 工學博士 校內名片

c#模擬網頁實現12306登陸自動刷票自動搶票完全篇

 這一篇文章,我將從頭到尾教大家使用c#模擬網頁面登陸12306網站,自動刷票,選擇訂票人,到最後一步提交訂單。研究過HTTP協議的童鞋們都知道,我們在訪問網站時,是有兩種方式的,POST和GET方式,HTTP協議是TCP/IP的一部分,有興趣的可以使用Socket通訊可