是否可以将命令行参数读为二进制数?如果有,怎么样?
如,
./a -v 10010110
此选项允许用户选择12个寄存器中使用的寄存器。我希望用户传递一个16位二进制数,需要使用标志1
读取寄存器,否则使用平面0
。
这是我想到的想法。如果这不是一个好主意,我怎样才能在不混淆用户的情况下完成它?
答案 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} }点)。