c语言整数转ip地址字符串,C/C++ ip地址与int类型的转换实例详解
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类型的转换实例详解相关推荐
- C 语言中获取系统时间的函数,C/C++如何获取当前系统时间的实例详解
C/C++如何获取当前系统时间的实例详解 C库中与系统时间相关的函数定义在头文件中, C++定义在头文件中. 一.time(time_t*)函数 函数定义如下: time_t time (time_t ...
- 【前端js】算法全归纳(三)字符串:最常用的20个正则表达式(附实例详解)
文章目录 一.表单验证常用 1.颜色 2.用户名 3.时间 4.日期 5.验证密码问题 6.邮箱字符串判断 7.身份证 8.不匹配任何东西 9.检查重复字符串 10.检查重复单词 11.判断是否以元音 ...
- c语言字符串正序反序连接输出,C语言中字符串实现正序与逆序实例详解
C语言中字符串实现逆序实例详解 字符串逆序和正序的实现代码: #include #include #include #include #include /*定义*/ typedef struct no ...
- java语言数据库编程_JAVA语言数据库编程实例详解
本文主要向大家介绍了JAVA语言数据库编程实例详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. DOS命令登录MySQL数据库:mysql -h 127.0.0.1 -u root ...
- c语言二级指针有什么作用,C语言中二级指针的实例详解
C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...
- python中字符串乘法_python leetcode 字符串相乘实例详解
给定两个以字符串形式表示的非负整数 num1 和 num2 ,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...
- [转载] python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解
参考链接: Python字符串| rfind python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in ...
- java 获取用户的MAC地址多种方法实例详解
java 获取用户的MAC地址多种方法实例详解 这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下 java实现获取用户的MAC地址方法: 方法一:将本机地址与局域 ...
- python 遍历字符串 字符_python 遍历字符串(含汉字)实例详解
python 遍历字符串(含汉字)实例详解 python 遍历字符串(含汉字)实例详解 s = "中国china" for j in s: print j 首先一个,你这个'a'是 ...
最新文章
- mysql中的explain_MySQL中的EXPLAIN
- 洛谷 P1004 方格取数 【多线程DP/四维DP/】
- [HNOI2008]神奇的国度
- HTML5 Canvas游戏开发实战 PDF扫描版
- 判断java String中是否有汉字的方法
- [转载] Python数据分析:python与numpy效率对比
- Docker-安装Vim
- numpy的广播机制
- 2022年基站行业研究报告
- 2019电赛巡线机器人总结
- ContextCapture、EPS、CASS3D房地一体详细操作流程
- 作业4—文法和语言总结与梳理
- python 标签_Python DataFrame中 打标签/归类 的6种方法
- python去除字符串中的空格、特殊字符、指定字符
- 学习ISTQB基础级的正确姿势
- mongodb服务配置
- matlab wind回测,[转载]基于Matlab和Wind SQL数据库的通用选股策略回测程序
- Docker swarm集群管理工具
- C练题笔记之:Leetcode-第 85 场双周赛---6158. 字母移位 II
- LMS自适应滤波算法的 matlab实现