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

发布时间 - 2026-01-10 22:13:43    点击率:

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 <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
 
#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; 
} 

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


# ip地址与int类型转换  # C语言ip地址与int类型如何转换  # ip地址与int类型转换实现方法  # Visual C++ 常用数据类型转换方法详解  # 有关C++中类类型转换操作符总结(必看篇)  # C++中4种强制类型转换的区别总结  # 详解C语言中不同类型的数据转换规则  # 能在  # 希望能  # 谢谢大家  # 转换成  # 值为  # 各部分  # 近看  # 但是有  # string  # stdlib  # gt  # stdio  # lt  # math  # LEN  # typedef  # unsigned  # uint  # define  # br 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何安全更换建站之星模板并保留数据?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  网页设计与网站制作内容,怎样注册网站?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  javascript中对象的定义、使用以及对象和原型链操作小结  大连 网站制作,大连天途有线官网?  如何正确选择百度移动适配建站域名?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Python图片处理进阶教程_Pillow滤镜与图像增强  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  微信推文制作网站有哪些,怎么做微信推文,急?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  使用Dockerfile构建java web环境  如何用西部建站助手快速创建专业网站?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Firefox Developer Edition开发者版本入口  Linux系统命令中screen命令详解  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Java遍历集合的三种方式  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  实例解析Array和String方法  如何在IIS中新建站点并解决端口绑定冲突?  如何用好域名打造高点击率的自主建站?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel如何使用查询构建器?(Query Builder高级用法)  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  香港服务器选型指南:免备案配置与高效建站方案解析  如何快速重置建站主机并恢复默认配置?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  WordPress 子目录安装中正确处理脚本路径的完整指南