// 按进制转换数据并显示(标准输出).
long int conv_value;
char* end_chars = NULL;
int conv_in = atoi(getenv("NUMCONV_IN"));
int conv_out = atoi(getenv("NUMCONV_OUT"));
for (int iB = 1; iB < argc; iB ++)
{
if (! test_chars(argv[iB], conv_in))
{
fprintf(stderr, "Invalid chars!\t-> %s\n", argv[iB]);
printf("xxx\n"); // 待转换字符串首字符即不合法. 打印 "xxx" 作标示.
continue;
}
if ( ((conv_value = strtol(argv[iB], &end_chars, conv_in) ) == LONG_MAX)
|| ((conv_value = strtol(argv[iB], &end_chars, conv_in) ) == LONG_MIN) )
{ // 数值字符串超出long类型范围, 打印 "???" 作标示.
fprintf(stderr, "Overflow or Underflow of:\t%s\n", argv[iB]);
printf("???\n");
continue;
}
if ( (end_chars != NULL) && (strcmp(end_chars, "")) )
{ // 在标准错误输出设备指出不能转换的非法字符.
fprintf(stderr, "Spare chars of string end!\t-> %s\n", end_chars);
end_chars = NULL;
}
switch (conv_out)
{ // 格式化显示转换后的数据.
case 0:
case 10:
printf("%d\n", conv_value);
break;
case 8:
printf("%#o\n", conv_value);
break;
case 16:
printf("%#x\n", conv_value);
break;
case 2:
printf("%s\n", puts_bin_string(bin_string, conv_value));
break;
default:
printf("Please set NUMCONV_OUT for correct.\n");
printf("Please tyt -h or --help for help!\n");
return -1;
}
}
return 0; // 数值转换结束.
}