1. 程式人生 > >IP轉換為32位無符號數(即,inet_aton函式)

IP轉換為32位無符號數(即,inet_aton函式)

#include<sys/types.h>
#include<netinet/in.h>

int  inet_aton(const char *cp, struct in_addr *ap)
{
    int dots = 0;
    register u_long acc = 0, addr = 0;

    do {
	register char cc = *cp;

	switch (cc) {
	case '0':
	case '1':
	case '2':
	case '3':
	case '4':
	case '5':
	case '6':
	case '7':
	case '8':
	case '9':
	    acc = acc * 10 + (cc - '0');
	    break;

	case '.':
	    if (++dots > 3) {
		return 0;
	    }
	    /* Fall through */

	case '\0':
	    if (acc > 255) {
		return 0;
	    }
	    addr = addr << 8 | acc;
	    acc = 0;
	    break;

	default:
	    return 0;
	}
    } while (*cp++) ;

    /* Normalize the address */
    if (dots < 3) {
	addr <<= 8 * (3 - dots) ;
    }

    /* Store it if requested */
    if (ap) {
	ap->s_addr = htonl(addr);
    }

    return 1;    
}


相關推薦

IP轉換32符號,inet_aton函式

#include<sys/types.h> #include<netinet/in.h> int inet_aton(const char *cp, struct in_addr *ap) { int dots = 0; register u_long acc =

二十四進制編碼串轉換32符號整數C語言實現

bool while open 參數錯誤 hint div 第一個字符 bsp opened typedef int BOOL; #define TRUE 1; #define FALSE 0; #define UINT_MAX 0xffffffff

兩個16符號整數轉換32符號整數的方法

在工作中遇到需要將兩個16位的有符號整數轉換為32位有符號整數的功能,具體情況是需要把PLC裡放在兩個D軟元件裡的32位資料以16位為單位讀到PC端後再轉換為32位資料。經過實踐,方法和注意事項整理如下: 先列出可用方法供大家參考,如有錯誤請指正! 第一種、通過BitCon

十進位制點分IP轉換32二進位制IP

寫這篇部落格的緣由在於自己在判斷IP地址的合法性上吃了幾次考慮不周全的虧。 算是引以為戒吧。 #include <iostream> #include <string> #include <vector> usin

百納筆試題 把ip字串轉換32二進位制

#include <iostream> #include <string> using namespace std; int ip[32]={0};//可以只寫一個0,不然的話就是隨見的如-3895567 之類的。 int * intToA(in

判斷32符號整數二進位制中1的個數

1、比較簡單和容易理解的方法就是逐位比較法: #include <iostream> using namespace std; int findone(unsigned int n) { for(int i=0;n>0;n>>=1)

【程式設計之美】任意給定一個32符號整數n,求n的二進位制表示中1的個數

任意給定一個32位無符號整數n,求n的二進位制表示中1的個數,比如n = 5(0101)時,返回2,n = 15(1111)時,返回4。這也是一道比較經典的題目了,相信不少人面試的時候可能遇到過這道題吧,我今天就遇到了,當時懵了。現在想想多簡單,浪費了一次機會。 1.普通法

顛倒給定的 32 符號整數的二進位制python

顛倒給定的 32 位無符號整數的二進位制位。 示例: 輸入: 43261596 輸出: 964176192 解釋: 43261596 的二進位制表示形式為 000000101001010000011

oracle資料庫計算兩個時間型別欄值的時間差,並轉換合適的時間格式顯示按時分秒展示

1.背景    資料庫表名為tablename。其中兩個欄位為startdate(開始時間),closedate(結束時間)。 2.需求    建立試圖,查詢出間隔時間並顯示為自定義的格式。 3.sql語句  select t.*,

32AES加密解密AES/ECB/PKCS7Padding

兩個問題:1. 金鑰超出了JDK預設的長度128時會報錯:java.security.InvalidKeyException: Illegal key size or default parameters(參考別人的)因為美國的出口限制,Sun通過許可權檔案(local_po

win8 X64上安裝32Oracle Instant Client即時客戶端 安裝與配置

一、下載 這是Oracle Instant Client的下載首頁,有很多種版本可供下載。 但要注意第三方工具如:PL/SQL Developer和Toad的版本,32位的要對應32位的OracleInstant Client,不要因為系統是64位的就下載64位的,

ARP:將32IP地址轉換48的實體地址。

ARP:將32位的IP地址轉換為48位的實體地址。 IP地址是網路層的地址,連上網際網路的每一臺主機的每一個介面都會有一個IP地址,每臺主機的每個網絡卡均有唯一的實體地址,實體地址在生產時就已經定死,無法改變,而每個網絡卡的IP地址是可以改變的(例如連上不同的

# int Convert.Tolnt32(string value) (+ 18過載) 將數字的指定字串表示形式轉換等效的32符號整數。 異常: ## 標題System.FormatExce

int Convert.Tolnt32(string value) (+ 18過載) 將數字的指定字串表示形式轉換為等效的32位有符號整數。 異常: ## 標題System.FormatExceptionSystem.OverflowException 求解答

c# byte陣列轉換 8符號整數 16符號整數 32符號整數

   byte陣列   byte[] aa = new byte[] { 0xF8, 0x66, 0x55, 0x44 }; 1.轉換成8位有符號整數   sbyte sb = (sbyte)aa[0]; 2.轉換成16位有符號整數 &n

符號符號之間的轉換

補碼與無符號數 補碼轉換為無符號數原理: 例如: T2Uw(−12345)=−123456+216=53191 T2U_{w}(-12345) = -123456+2^{16}=53191 T2Uw​(−12345)=−123456+216=5

符號符號轉換及思考

1 有符號數和無符號數的表示 三者的最高位均為符號位. 我以前一直沒弄明白的是為何8位補碼的表示範圍是-128~127, 今天查閱了相關資料,於此記下。 仍然以8位為例: 原碼 原碼的表示範圍-127~-0, +0~+127, 共256個數字。

關於把一個符號的二進位制翻轉的兩種實現方法

#include <stdlib.h> #include <stdio.h> #include <math.h> unsigned int reserve_bit(u

c語言中32地址型別轉換64整數型別

uint64_t idt_operand = ((sizeof(idt) - 1) | ((uint64_t)(uint32_t)idt << 16)); idt是陣列名,也就是結構陣列型別的指標。static struct gate_desc idt[IDT

java中有符號符號互相轉換

java中有符號數與無符號數互相轉換 文章目錄 java中long型別轉換成無符號數 java中無符號數轉換成有符號數 java中long型別轉換成無符號數 由於JAVA中基本資料型別均為有符號數,而且最大資料型別lon

關於OF CF 標誌對於判定兩整數大小關係符號及有符號情況作用的討論

在x-86 64 IA32 體系下,處理器通過對兩數求差(儲存或不儲存結果)然後讀取被改變的條件碼來判定結果的正負,進而得知兩整數大小關係。其背後的邏輯關係設計非常精妙,然而大部分書籍資料中都只是一筆帶過。在此我做一個較為深入的討論。討論將分為兩個部分,有符號整數和無符號整