Sal*_*din 2 c flags command-line
是否可以将命令行参数读取为二进制数?如果是,如何?
例如,
./a -v 10010110
此选项允许用户从 12 个寄存器中选择要使用的寄存器。我希望用户传递一个 16 位二进制数,需要使用 flag 读取寄存器1,否则使用 flat 0。
这是我心中的想法。如果这不是一个好主意,我怎样才能在不混淆用户的情况下完成它?
在命令行上传递的值是字符串。在程序中,您可以按照您选择的任何方式处理字符串。
如果您需要从 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点)。
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |