欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++ ip地址與int類型的轉(zhuǎn)換實例詳解

 更新時間:2016年12月30日 14:59:01   投稿:lqh  
這篇文章主要介紹了C/C++ ip地址與int類型的轉(zhuǎn)換實例詳解的相關(guān)資料,這里提供了實例代碼,實現(xiàn)思路及實現(xiàn)方法,需要的朋友可以參考下

C/C++ ip地址與int類型的轉(zhuǎn)換實例詳解

前言

最近看道一個面試題目,大體意思就是將ip地址,例如“192.168.1.116”轉(zhuǎn)換成int類型,同時還能在轉(zhuǎn)換回去

思路

ip地址轉(zhuǎn)int類型,例如ip為“192.168.1.116”,相當(dāng)于“.“將ip地址分為了4部分,各部分對應(yīng)的權(quán)值為256^3, 256^2, 256, 1,相成即可

int類型轉(zhuǎn)ip地址,思路類似,除以權(quán)值即可,但是有部分字符串的操作

實現(xiàn)代碼

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
 
#define LEN 16 
 
typedef unsigned int uint; 
 
/** 
 * 字符串轉(zhuǎn)整形 
 */ 
uint ipTint(char *ipstr) 
{ 
  if (ipstr == NULL) return 0; 
 
  char *token; 
  uint i = 3, total = 0, cur; 
 
  token = strtok(ipstr, "."); 
 
  while (token != NULL) { 
    cur = atoi(token); 
    if (cur >= 0 && cur <= 255) { 
      total += cur * pow(256, i); 
    } 
    i --; 
    token = strtok(NULL, "."); 
  } 
 
  return total; 
} 
 
/** 
 * 逆置字符串 
 */ 
void swapStr(char *str, int begin, int end) 
{ 
  int i, j; 
 
  for (i = begin, j = end; i <= j; i ++, j --) { 
    if (str[i] != str[j]) { 
      str[i] = str[i] ^ str[j]; 
      str[j] = str[i] ^ str[j]; 
      str[i] = str[i] ^ str[j]; 
    } 
  } 
} 
 
/** 
 * 整形轉(zhuǎn)ip字符串 
 */ 
char* ipTstr(uint ipint) 
{ 
  char *new = (char *)malloc(LEN); 
  memset(new, '\0', LEN); 
  new[0] = '.'; 
  char token[4]; 
  int bt, ed, len, cur; 
 
  while (ipint) { 
    cur = ipint % 256; 
    sprintf(token, "%d", cur); 
    strcat(new, token); 
    ipint /= 256; 
    if (ipint) strcat(new, "."); 
  } 
 
  len = strlen(new); 
  swapStr(new, 0, len - 1); 
 
  for (bt = ed = 0; ed < len;) { 
    while (ed < len && new[ed] != '.') { 
      ed ++; 
    } 
    swapStr(new, bt, ed - 1); 
    ed += 1; 
    bt = ed; 
  } 
 
  new[len - 1] = '\0'; 
 
  return new; 
} 
 
int main(void) 
{ 
  char ipstr[LEN], *new; 
  uint ipint; 
 
  while (scanf("%s", ipstr) != EOF) { 
    ipint = ipTint(ipstr); 
    printf("%u\n", ipint); 
 
    new = ipTstr(ipint); 
    printf("%s\n", new); 
  } 
 
  return 0; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • C語言中的逗號運算符詳解

    C語言中的逗號運算符詳解

    在C語言中逗號“,”也是一種運算符,稱為逗號運算符,其功能是把兩個表達式連接起來組成一個表達式,?稱為逗號表達式,這篇文章主要介紹了C語言中的逗號運算符,需要的朋友可以參考下
    2022-11-11
  • C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    這篇文章主要為大家詳細介紹了C++實現(xiàn)數(shù)據(jù)文件存儲與加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • COLORREF,COLOR,RGB,CString的轉(zhuǎn)化總結(jié)分析

    COLORREF,COLOR,RGB,CString的轉(zhuǎn)化總結(jié)分析

    實際的軟件開發(fā)過程中,常需要用到非.net平臺的代碼。這時候就可能碰到ColorRef(也就是以int類型代表的顏色值或是以DWORD值表示的顏色)。這跟.net平臺下的顏色的相互轉(zhuǎn)換MS并沒有直接實現(xiàn)
    2013-09-09
  • 解析在Direct2D中畫Bezier曲線的實現(xiàn)方法

    解析在Direct2D中畫Bezier曲線的實現(xiàn)方法

    本篇文章是對在Direct2D中畫Bezier曲線的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中對象的賦值與復(fù)制操作詳細解析

    C++中對象的賦值與復(fù)制操作詳細解析

    對象之間的賦值也是通過賦值運算符“=”進行的。本來賦值運算符“=”只能用來對單個的變量賦值,現(xiàn)在被擴展為兩個同類對象之間的賦值,這是通過對賦值運算符的重載實現(xiàn)的
    2013-10-10
  • c/c++小游戲源代碼

    c/c++小游戲源代碼

    這篇文章主要介紹了c/c++小游戲源代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • c語言獲取當(dāng)前工作路徑的實現(xiàn)代碼(windows/linux)

    c語言獲取當(dāng)前工作路徑的實現(xiàn)代碼(windows/linux)

    這篇文章主要介紹了c語言獲取當(dāng)前工作路徑的實現(xiàn)代碼(windows/linux),需要的朋友可以參考下
    2017-09-09
  • 一文搞懂C++多態(tài)的用法

    一文搞懂C++多態(tài)的用法

    C++多態(tài)是在繼承的基礎(chǔ)上實現(xiàn)的,了解多態(tài)之前我們需要掌握一定的C++繼承的知識,本文將介紹C++中多態(tài)的概念,構(gòu)成條件以及用法,感興趣的可以學(xué)習(xí)一下
    2022-04-04
  • 詳談C與C++的函數(shù)聲明中省略參數(shù)的不同意義

    詳談C與C++的函數(shù)聲明中省略參數(shù)的不同意義

    下面小編就為大家分享一篇詳談C與C++的函數(shù)聲明中省略參數(shù)的不同意義,具有非常好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C語言中用棧+隊列實現(xiàn)隊列中的元素逆置

    C語言中用棧+隊列實現(xiàn)隊列中的元素逆置

    這篇文章主要介紹了C語言中用利用棧和隊列實現(xiàn)隊列中的元素逆置的相關(guān)資料,對正在學(xué)習(xí)的小伙伴有一定的參考價值,需要的可以參考一下,希望對你有所幫助
    2022-02-02

最新評論