C/C++ ip地址与int类型的转换实例详解

前言

最近看道一个面试题目,大体意思就是将ip地址,例如“192.168.1.116”转换成int类型,同时还能在转换回去

思路

ip地址转int类型,例如ip为“192.168.1.116”,相当于“.“将ip地址分为了4部分,各部分对应的权值为256^3, 256^2, 256, 1,相成即可

int类型转ip地址,思路类似,除以权值即可,但是有部分字符串的操作

实现代码

#include

#include

#include

#include

#define LEN 16

typedef unsigned int uint;

/**

* 字符串转整形

*/

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];

}

}

}

/**

* 整形转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;

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

c语言整数转ip地址字符串,C/C++ ip地址与int类型的转换实例详解相关推荐

  1. C 语言中获取系统时间的函数,C/C++如何获取当前系统时间的实例详解

    C/C++如何获取当前系统时间的实例详解 C库中与系统时间相关的函数定义在头文件中, C++定义在头文件中. 一.time(time_t*)函数 函数定义如下: time_t time (time_t ...

  2. 【前端js】算法全归纳(三)字符串:最常用的20个正则表达式(附实例详解)

    文章目录 一.表单验证常用 1.颜色 2.用户名 3.时间 4.日期 5.验证密码问题 6.邮箱字符串判断 7.身份证 8.不匹配任何东西 9.检查重复字符串 10.检查重复单词 11.判断是否以元音 ...

  3. c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解

    C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...

  4. java语言数据库编程_JAVA语言数据库编程实例详解

    本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...

  5. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  6. python中字符串乘法_python leetcode 字符串相乘实例详解

    给定两个以字符串形式表示的非负整数 num1 和  num2 ,返回  num1 和  num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...

  7. [转载] python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解

    参考链接: Python字符串| rfind python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in ...

  8. java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...

  9. python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解

    python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in s: print j 首先一个,你这个'a'是 ...

最新文章

  1. mysql中的explain_MySQL中的EXPLAIN
  2. 洛谷 P1004 方格取数 【多线程DP/四维DP/】
  3. [HNOI2008]神奇的国度
  4. HTML5 Canvas游戏开发实战 PDF扫描版
  5. 判断java String中是否有汉字的方法
  6. [转载] Python数据分析:python与numpy效率对比
  7. Docker-安装Vim
  8. numpy的广播机制
  9. 2022年基站行业研究报告
  10. 2019电赛巡线机器人总结
  11. ContextCapture、EPS、CASS3D房地一体详细操作流程
  12. 作业4—文法和语言总结与梳理
  13. python 标签_Python DataFrame中 打标签/归类 的6种方法
  14. python去除字符串中的空格、特殊字符、指定字符
  15. 学习ISTQB基础级的正确姿势
  16. mongodb服务配置
  17. matlab wind回测,[转载]基于Matlab和Wind SQL数据库的通用选股策略回测程序
  18. Docker swarm集群管理工具
  19. C练题笔记之:Leetcode-第 85 场双周赛---6158. 字母移位 II
  20. LMS自适应滤波算法的 matlab实现

热门文章

  1. js禁止浏览器后退/返回
  2. IM即时通讯开发万人群聊消息投递方案
  3. Time Reversal Resonating Strength
  4. 微信扫一扫扫描二维码跳转到小程序指定页面
  5. macos安装git命令行_MAC OS git客户端安装及操作
  6. springAOP面试题
  7. 数论四大定理----算法详析
  8. [C1进阶之路-Web基础] 转义字符
  9. Java Comparator.comparing比较导致空指针异常
  10. Incremental SfM