我可以将命令行参数读为二进制吗?

时间:2018-03-22 16:21:16

标签: c command-line flags

是否可以将命令行参数读为二进制数?如果有,怎么样?

如, ./a -v 10010110

此选项允许用户选择12个寄存器中使用的寄存器。我希望用户传递一个16位二进制数,需要使用标志1读取寄存器,否则使用平面0

这是我想到的想法。如果这不是一个好主意,我怎样才能在不混淆用户的情况下完成它?

1 个答案:

答案 0 :(得分:4)

命令行传递的值是字符串。在程序内部,您可以以您选择的任何方式处理字符串。

如果您需要从0..15(或1..16)设置获得一个位,那么最好使用该位的十进制数而不是强制用户进行计数。您只需使用argv[2]或包含该数字的任何索引,使用atoi()strtol()等函数将其转换为数字bitnum(错误检查值为负数或大数()),然后使用1U << bitnum获取16位unsigned short中的值或等效值。

如果用户可以在一个命令调用中指定多个寄存器,那么二进制更合理(尽管不一定完全合理),但要考虑十六进制优于二进制的优点(一个十六进制数字控制四位的值)。 / p>

如果你坚持使用二进制文件,则strtol()是要使用的函数;它会将字符串转换为二进制(char *eos; int bitnum = strtol(argv[2], &eos, 2); - 然后转换为check the conversion carefully;您需要在转换前将errno设置为0,并仔细查看返回值以及{{1} }点)。