我如何从用户c中将十六进制输入转换为数组

时间:2017-02-16 08:00:50

标签: c arrays string

我会将用户的十六进制输入转换为buffer数组,但我不接受它,scanf不合适。像这样输入数据(0x 06 41 42 43 0f 52 53)。此外,我想将字符串转换为整数类型的数组的一部分。我使用atoi,最好的方法是什么?

#include <stdio.h>

int main(){

    char buffer[1000];
    char dest[3];
    int x;

    //scanf("%s",buffer);
    x=atoi(strncpy(dest,buffer+1,4))
}

2 个答案:

答案 0 :(得分:0)

以下简单函数将具有十六进制数的字符串转换为整数:

int atox(const char *s)
{
    int x= 0;
    while (*s) {
        x= x*16+(*s>'9'?(toupper(*s)-'A'+10):*s-'0');
        s++;
    }
    return x;
}

并称之为:

printf("%02x\n",atox("42"));
printf("%02x\n",atox("a1"));
printf("%02x\n",atox("A1"));

请注意,字符串必须是要转换的字符串,因此没有空格或其他内容。

答案 1 :(得分:0)

以下是使用strtol函数的代码,在字符串中将数字视为十六进制(对于base8,它们将是八进制的):

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *s="00 06 41 42 43 0f 52 53";
    char *endpoint=s;
    int base=16,count=1;
    long int result=0;

    do
    {
      result=strtol(endpoint,&endpoint,base);
      printf("value %d %ld\n",count,result);
      count++;
    }while((endpoint - s) < (size_t)strlen(s) );
    return 0;
}