c语言函数实现:atoi()功能:将字符串IP地址转为四字节整数
时间: 2024-02-01 12:14:28 浏览: 23
以下是一个简单的实现,可以将字符串格式的IP地址转换为四字节整数:
```c
#include <stdio.h>
#include <string.h>
unsigned int atoi(const char *str_ip)
{
int i, j;
unsigned int num = 0;
unsigned char b[4];
// 将字符串按照 . 分割为四个部分
sscanf(str_ip, "%d.%d.%d.%d", &b[0], &b[1], &b[2], &b[3]);
// 将每个部分转换为一个字节,并合并为一个四字节整数
for (i = 0; i < 4; i++) {
num += b[i] << (24 - i * 8);
}
return num;
}
```
使用示例:
```c
int main()
{
const char* str_ip = "192.168.1.1";
unsigned int ip = atoi(str_ip);
printf("IP address: %u\n", ip);
return 0;
}
```
输出结果:
```
IP address: 3232235777
```
相关问题
用C语言实现字符串转数字函数:int atoi(const char *str)
以下是使用C语言实现的atoi函数:
```c
#include <stdio.h>
int atoi(const char *str) {
int result = 0;
int sign = 1;
int i = 0;
// 处理空格
while (str[i] == ' ') {
i++;
}
// 处理符号
if (str[i] == '-' || str[i] == '+') {
sign = (str[i++] == '-') ? -1 : 1;
}
// 转换数字
while (str[i] >= '0' && str[i] <= '9') {
result = result * 10 + (str[i++] - '0');
}
return sign * result;
}
int main() {
const char *str = "12345";
int num = atoi(str);
printf("转换后的数字为: %d\n", num);
return 0;
}
```
在上述代码中,我们使用了循环来遍历字符串中的字符,并根据ASCII码进行相应的转换操作。处理空格、符号和数字的逻辑都有相应的处理方式,最后返回转换后的整数值。
c语言如何不使用atoi函数将数字字符串转化为一个整数
可以使用循环遍历字符串的每一位,将每一位的字符转化为数字,然后根据每一位的权值相加得到整数。
下面是一个简单的示例代码:
```
#include <stdio.h>
int strToInt(char* str) {
int result = 0;
int i = 0;
int sign = 1;
// 判断正负号
if (str[0] == '-') {
sign = -1;
i++;
}
// 遍历字符串
while (str[i] != '\0') {
// 将字符转化为数字
int digit = str[i] - '0';
// 判断字符是否为数字
if (digit >= 0 && digit <= 9) {
result = result * 10 + digit;
} else {
printf("输入的字符串不是数字!\n");
return 0;
}
i++;
}
return sign * result;
}
int main() {
char str[100];
printf("请输入一个数字字符串: ");
scanf("%s", str);
int num = strToInt(str);
printf("转化后的整数为: %d\n", num);
return 0;
}
```
需要注意的是,该代码没有对输入的字符串进行越界检查,如果输入的字符串超出了数组的范围,可能会导致程序崩溃。在实际应用中需要对输入的字符串进行安全检查。