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 子目录安装中正确处理脚本路径的完整指南

