【问题标题】:How i take hex input into array from users c我如何将用户 c 的十六进制输入输入数组
【发布时间】:2017-02-16 08:00:49
【问题描述】:

我会将用户的十六进制输入输入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))
}

【问题讨论】:

  • 你可以把它保存为一个字符串然后解析它。并将其转换为十进制。
  • (00 06 41 42 43 0f 52 53) 是八进制(不是十六进制)
  • @KeineLust 八进制不包括 f。
  • @OğuzhanAvcı 十六进制以 0x 作为前缀。任何没有的东西都不是十六进制的。
  • @OğuzhanAvcı 你可以保留00 这实际上不是问题。

标签: c arrays string


【解决方案1】:

下面的简单函数将一个十六进制数的字符串转换为一个整数:

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"));

请注意,字符串必须是要转换的字符串,所以不能有空格或其他任何东西。

【讨论】:

  • 谢谢,我理解你的功能,但它给出了分段错误(核心转储)为什么?
  • 查看更新:可能您调用的字符串不正确。
【解决方案2】:

这是使用 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多