引用用户传递的参数的单个字符

时间:2015-02-12 13:09:42

标签: c string arguments hex converter

我正在尝试制作一个十六进制到字符串转换器。我希望参数在运行时传递。到目前为止,我有这个..

int main(int argc, const char *argv[]){
    int i;
    for (i=0; i < strlen(argv[1]); i++) {
        printf("%s = %c\n",argv[1], (int)atol(argv[i]));
    }
    return 0;
}

但在printf() - argv[i]中指的是该次运行的所有字符串。 (例如“HexToString.exe”,“ABCDEF0123456789”)但我想要做的是引用第二个参数中的所有字符,所以`argv [1] [4] ='E',但我不认为我可以把那里的第二个支架,因为它是一维数组,当我测试它时,它没有提前工作。

输出,这看起来很奇怪,我想成为十六进制值的ascii等价物。例如..'B'是11,ascii 11是♂。

所以我想我真正想要做的就是^但是带有一串这些值。我知道这不会正常工作(它会一次读取两个字符,转换和输出)但是现在虽然我只想一次转换单个字符。

也正确编译了双括号但执行后出错。

2 个答案:

答案 0 :(得分:1)

它没有用,因为atol需要char指针,试试这个

char buffer[2];

buffer[0] = argv[1][4];
buffer[1] = '\0';

printf("%s = %c\n", argv[1], (int)atol(buffer));

答案 1 :(得分:1)

您可以为所有字符组织循环

int main(int argc, const char *argv[])
 { int i; 

   printf("%s has \n",argv[1]);
   for (i=0; i < strlen(argv[1]); i++) 
   { 
      printf("%c = %d\n", argv[1][i],
      (argv [1][i] >= 'A')? (argv [1][i] - 'A' + 10 ) : (argv [1][i] - '0');
   } 
   return 0;
 }