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

Sal*_*din 2 c flags command-line

是否可以将命令行参数读取为二进制数?如果是,如何?

例如, ./a -v 10010110

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

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

Jon*_*ler 5

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

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

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

如果你坚持使用二进制,那么strtol()就是要使用的函数;它将字符串转换为二进制(char *eos; int bitnum = strtol(argv[2], &eos, 2);- 然后仔细检查转换;您需要errno在转换前设置为 0,并仔细查看返回值和 whereeos点)。