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


相关推荐: 如何在云主机上快速搭建多站点网站?  JavaScript如何实现音频处理_Web Audio API如何工作?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel如何自定义错误页面(404, 500)?(代码示例)  利用vue写todolist单页应用  如何在腾讯云服务器上快速搭建个人网站?  iOS UIView常见属性方法小结  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Bootstrap CSS布局之列表  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  如何在自有机房高效搭建专业网站?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Python数据仓库与ETL构建实战_Airflow调度流程详解  如何在宝塔面板中创建新站点?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Laravel如何处理CORS跨域请求?(配置示例)  如何用虚拟主机快速搭建网站?详细步骤解析  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  潮流网站制作头像软件下载,适合母子的网名有哪些?  C语言设计一个闪闪的圣诞树  Java遍历集合的三种方式  音响网站制作视频教程,隆霸音响官方网站?  如何做网站制作流程,*游戏网站怎么搭建?  Laravel中的withCount方法怎么高效统计关联模型数量  如何快速配置高效服务器建站软件?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Java解压缩zip - 解压缩多个文件或文件夹实例  如何在云指建站中生成FTP站点?  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  Laravel如何使用Service Container和依赖注入?(代码示例)  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Internet Explorer官网直接进入 IE浏览器在线体验版网址  ,在苏州找工作,上哪个网站比较好?  如何基于云服务器快速搭建个人网站?  详解Android——蓝牙技术 带你实现终端间数据传输  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  如何用AWS免费套餐快速搭建高效网站?