【问题标题】:how to convert char array to int in C language [closed]如何在 C 语言中将 char 数组转换为 int [关闭]
【发布时间】:2013-06-12 05:23:12
【问题描述】:

我这里有些麻烦,我想转换这个 char 数组

char IP[]="2001:2AB1:30A1:2000:1000:ABC1"

to 4 int key1,key2,key3,key4 with 
key1=2001
key2=2AB1
key3=30A1
key4=2000:1000:ABC1

我正在使用 C 语言。

谢谢

【问题讨论】:

  • 2000:1000:ABC1 怎么是整数?
  • 另外,您似乎没有在 Google 上搜索过 "C convert string to integer",您应该为此感到难过。
  • key4 应该如何转换为 int?你期待什么?
  • 2AB130A1 是整数吗?
  • 您必须做一些工作来划分输入,但通常strtol 是一个有用的基础。有关各种方法,请参阅stackoverflow.com/q/10324/2246674。 (他们需要一些适应)。此外,30A1 是一个 invalid C base-10 数字文字(什么是十进制的“A”?),而 0x30A1 是一个 base-16 数字文字,其计算结果为 12449。跨度>

标签: c


【解决方案1】:

您似乎想将 IPv6 地址转换为四个整数。如果它们在您的环境中可用,我建议您利用现有的库函数来完成此操作。具体来说,inet_ntop 可以将您的字符串转换为struct in6_addr,这应该更容易处理。

【讨论】:

  • 是的,它是一个 IPv6 地址,我想将其划分为键以在每个键中执行一些操作
【解决方案2】:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

char *strdelch(char *str, char ch){
    char *from, *to;
    if(NULL==str)return str;

    from=to=str;
    while(*from){
        if(*from != ch)
            *to++ = *from;
        ++from;
    }
    *to = '\0';
    return str;
}

int main(void){
    char IP[]="2001:2AB1:30A1:2000:1000:ABC1";
    int key1,key2,key3;
    int64_t key4;
    char *p = IP;

    key1 = strtol(p, &p, 16);
    key2 = strtol(++p, &p, 16);
    key3 = strtol(++p, &p, 16);
    key4 = strtoll(strdelch(++p, ':'), NULL, 16);
    printf("%04X\n", key1);
    printf("%04X\n", key2);
    printf("%04X\n", key3);
    printf("%012I64X\n", key4);
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多