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

Can I read command line argument as binary?

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

例如, ./a -v 10010110

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

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

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

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

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

如果你非要用二进制,那么strtol()就是要用的函数;它会将字符串转换为二进制(char *eos; int bitnum = strtol(argv[2], &eos, 2); — 然后是 check the conversion carefully;您需要在转换之前将 errno 设置为 0,并仔细查看 return 值以及位置eos 点)。