将IP地址char转换为long

时间:2017-01-30 21:51:46

标签: c long-integer

我编写了一个小程序来将char转换为long,但是当我尝试打印char表单时,它会输出错误。

int main()
{
    long l;
    char *buf = "127.0.0.1";
    memcpy(&l, buf, sizeof(long));
    printf("%s\n", (char *)&l);

    return 0;
}

输出如下:

  

127.0.0.t턾û

我知道我错过了一些简单的东西,但我正在画一个空白。

2 个答案:

答案 0 :(得分:3)

似乎有一些基本的误解: - )

var y = d3.scale.ordinal() .rangeRoundBands([height, 0], 0.35); var x = d3.scale.linear() .rangeRound([0, width]); char *数据类型之间复制不会将由数字序列表示的“数字”转换为“二进制”数字,如long;从longlong的演员都不会在你的char *陈述中做相反的事。

使用printfchar*转换为long,而通过atol

完成将长打印到控制台

在获得经验丰富的C程序员的路上祝你好运和耐心,并且毫不犹豫地问: - )

答案 1 :(得分:2)

这是一个以输入字符串形式获取IP地址并将其转换为long值的程序。 filter_ip()函数用于首先从字符串中删除所有非数字字符。然后strtol()用于将字符串转换为long值。

最好使用strtol()而不是atol()因为strtol()检测到整数溢出。 errno头文件中声明了error.h,如果有溢出,strtol()会设置errno的值。 strtol()从字符串的开头开始转换尽可能多的字符,并设置tailptr以指向其余字符。如果无法执行转换,tailptr将指向字符串的开头。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>

void filter_ip(char *str);

int main(void)
{
    char ip_addr[] = "127.0.0.1";
    long res;
    char *tailptr;

    printf("IP Address: %s\n", ip_addr);
    filter_ip(ip_addr);

    errno = 0;
    res = strtol(ip_addr, &tailptr, 10);
    if (errno) {
        perror("Unable to convert IP address");
    } else if (tailptr == ip_addr) {
        fprintf(stderr, "No conversion performed\n");
    } else {
        printf("%ld\n", res);
    }

    return 0;
}

void filter_ip(char *str)
{
    size_t i, j;

    for (i = 0, j = 0; str[i] != '\0'; i++) {
        if (isdigit(str[i])) {
            str[j++] = str[i];
        }
    }
    str[j] = '\0';
}

节目输出:

IP Address: 127.0.0.1
127001