1. 程式人生 > >網路位元組序之間的轉換函式詳解

網路位元組序之間的轉換函式詳解

接下來介紹兩組地址轉換函式,它們在ASCII字串和網路位元組序的二進位制值之間轉換網際地址。

(1).inet_aton,inet_addr和inet_ntoa在點分十進位制數串與它長度為32的網路位元組序二進位制值間轉換IPV4地址。你可能會在許多現有程式碼中見到這些函式。

(2)兩個較新的函式inet_pton和inet_ntop對於IPV4地址和IPV6地址都是適用的。

#include <arpa/inet.h>

int inet_aton(const char *strptr, struct in_addr *addrptr);

//返回:若字串有效則為1,否則為0

in_addr_t inet_addr(const char *strptr);

//返回:若字串有效則為32位二進位制網路位元組序的IPV4地址,否則為INADDR_None

char *inet_ntoa(struct in_addr inaddr);

//返回:指向一個點分十進位制數串的指標

第一個函式將strptr所指C字串轉換成一個32位的網路位元組序二進位制值,並通過指標addrptr來儲存。若成功則返回1,否則返回0。

inet_aton函式有一個沒有寫入正式文件中的特徵:如果addrptr指標為空,那麼該函式仍然對輸入的字串執行有效性檢查,但是不儲存任何結果。

inet_addr進行相同的轉換,返回值為32位的網路位元組序二進位制值。該函式存在一個問題:所有2的32次方個可能的二進位制值都是有效的Ip地址(0.0.0.0到255.255.255.255),但是當出錯時該函式返回INADDR_NONE常值(通常是一個32位均為1的值)。這意為著點分十進位制數串255.255.255.255不能由該函式處理,因為他的二進位制值被用來指示該函式失敗。

inet_addr函式還存在一個潛在問題:一些手冊頁面宣告該函數出錯時返回-1而不是INDDR_NONE。這樣在對該函式的返回值(一個無符號的值)和一個負常數(-1)進行比較是可能會發生錯誤,具體取決於C編譯器。

如今Inet_addr已經被廢棄,新的程式碼改為inet_aton函式。更加好的辦法是使用兩個新函式,他們對ipv4和ipv6都適用。

inet_ntoa函式將一個32位的網路位元組序二進位制IPV4地址轉換成相應的點分十進位制數串。由該函式的返回值所指向的字串駐留在靜態記憶體中。這意為著該函式是不可重入的,,最後需要注意,該函式以一個結構而不是以指向該結構的指標作為其引數

相關推薦

主機位元組網路位元組轉換函式:htonl、ntohl、htons、ntohs

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

網路位元組之間轉換函式

接下來介紹兩組地址轉換函式,它們在ASCII字串和網路位元組序的二進位制值之間轉換網際地址。 (1).inet_aton,inet_addr和inet_ntoa在點分十進位制數串與它長度為32的網路位元組序二進位制值間轉換IPV4地址。你可能會在許多現有程式碼中見到這些函式

Python Network Programming(4)---主機位元組網路位元組之間的相互轉換

編寫低層網路應用時,或許需要處理通過電纜在兩臺裝置之間傳送的低層資料,這種操作中,需要把主機作業系統發出的資料轉換成網路格式,或者做逆向轉換,因為這兩種資料的表示方式不一樣。 位元組序相關見u

Linux網路程式設計:socket程式設計簡介、網路位元組及相關函式

Socket(套接字) socket可以看成是使用者程序與核心網路協議棧的程式設計介面(API函式)。 socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。 IPv4套接字地址結構 IPv4套接字地址結構通常也稱為“網際套接字地址結構”,它以

一個簡單的BP神經網路matlab程式(附函式

說明:20180604更新2、本人對其中涉及到的函式進行了詳細說明。3、此程式中部分函式的使用方式是高版本Matlab中不推薦的文中給出了當前高版本Matlab中的使用方式,並給出了相關部落格地址,具體如下:4、使用過程中,可能出現的問題5、所需的IRIS資料集具體程式如下:

主機位元組網路位元組轉換:ntohl()與htonl()

#!/usr/bin/env python #coding=utf-8 import socket def convert_integer(): data=1234 #32-bit prin

1.socket基礎知識:埠;sockaddr_in;位元組轉換函式(本地/網路位元組);地址轉換函式

1.埠 在進行通訊的時候,要首先通過IP地址獲取主機 再通過Port用來區分和主機上的哪個應用程式通訊 2.IPv4套介面地址結構:網際套接字地質結構 sockaddr_in:man 7 ip 1.標頭檔案:netinet/in.h 2.sockaddr_in結構 struct

2、【網路程式設計】TCP報文段/網路位元組/主機位元組/網-主位元組轉換函式

一、TCP報文段格式     TCP雖然是面向位元組流的,但TCP傳送的資料單元卻是報文段。一個TCP報文段分為首部和資料兩個部分。TCP報文段首部的前20個位元組是固定的,後面有4n位元組是根據需要增加的選項。TCP首部的最小長度是20位元組,最大長度是60位元組。

01大小端、網路位元組、地址轉換函式的使用

#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <sys/so

網路位元組和主機位元組!!!

我們都知道,如今的通訊方式已經趨向與多樣化,異構通訊(計算機軟體(作業系統) +    計算機硬體(核心架構,ARM,x86)不同)也已經很普遍了,如,手機和電腦中的qq進行通訊,,, 同時,在計算

網路位元組轉換函式(64位)

在網路程式設計裡,網路位元組序是big-endian的,而大部分的PC的系統都是X86處理器系列,X86採用的是little-endian,所以需要將 網路資料流轉換成本地資料流的話,需要進行位元組序的轉換。 標準庫裡提供了hlton()和nthl()兩個函式來支援轉換。

1.socket程式設計:socket程式設計,網路位元組函式介紹,IP地址轉換函式,sockaddr資料結構,網路套接字函式,socket相關函式,TCP server和client

 1Socket程式設計 socket這個詞可以表示很多概念: 在TCP/IP協議中,“IP地址+TCP或UDP埠號”唯一標識網路通訊中的一個程序,“IP 地址+埠號”就

機器學習中Logistic損失函式以及神經網路損失函式

機器學習中最重要的三個部分為網路結構、損失函式、優化策略。 而其中以損失函式最難以理解,主要原因是需要較強的數學知識,其中用的最多的就是引數估計。 所謂引數估計就是:對未知引數θ進行估計時,在引數可能的取值範圍內選取,使“樣本獲得此觀測值”的概率最大的引數作為θ的估計,這樣選定的有利於”

Spark函式系列之RDD基本轉換

摘要:  RDD:彈性分散式資料集,是一種特殊集合 ‚ 支援多種來源 ‚ 有容錯機制 ‚ 可以被快取 ‚ 支援並行操作,一個RDD代表一個分割槽裡的資料集  RDD有兩種操作運算元:      Transformation(轉換):Transformation屬於延遲計

Spark函式系列之RDD基本轉換+例項

 RDD:彈性分散式資料集,是一種特殊集合 ‚ 支援多種來源 ‚ 有容錯機制 ‚ 可以被快取 ‚ 支援並行操作,一個RDD代表一個分割槽裡的資料集   RDD有兩種操作運算元:       &nbs

主機位元組網路位元組轉換

小端位元組序:即一個整數的高位位元組存放在記憶體中的高位地址處,低位位元組存放在記憶體中的低位地址處 大端位元組序:與小端位元組序剛好相反 現代的pc多采用小端位元組序,而java虛擬機器採用大端位元組序,網路採用的也是大端位元組序 所以在網路傳輸中通常我們需要進行位元組

網路通訊之 位元組轉換原理與網路位元組、大端和小端模式

     原因如下:網路協議規定接收到得第一個位元組是高位元組,存放到低地址,所以傳送時會首先去低地址取資料的高位元組。小端模式的多位元組資料在存放時,低地址存放的是低位元組,而被髮送方網路協議函式傳送時會首先去低地址取資料(想要取高位元組,真正取得是低位元組),接收方網路協議函式接收時會將接收到的第一個位元

【深度學習基礎-09】神經網路-機器學習深度學習中~Sigmoid函式

目錄 Sigmoid函式常常被用作神經網路中啟用函式   雙曲函式tanh(x) Logistic函式  拓展對比 Sigmoid函式常常被用作神經網路中啟用函式   函式的基本性質: 定義域:(−∞,+∞

網路位元組函式

位元組序一般分為兩種:小端位元組序:將低序位元組儲存在起始位置大端位元組序:將高序位元組儲存在起始位置網路位元組序一般為大端位元組序主機位元組序就根據各個機器實際情況決定。所以通訊過程中就存在了位元組序轉換的一些操作,網路程式設計中專門提供了一些函式實現位元組序轉換的操作。h

Linux核心分析 - 網路:netif_receive_skb平臺報文入口函式

網路收包流程從網絡卡驅動開始,一直往上,涉及NAPI、GRO、RPS等特性,但是一般最後都會呼叫__netif_receive_skb函式: 函式主要有幾個處理: 1、vlan報文的處理,主要是迴圈把vlan頭剝掉,如果qinq場景,兩個vlan都會被剝掉; 2、交給rx_h