我可以将命令行参数读取为二进制吗?
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
点)。
是否可以将命令行参数读取为二进制数?如果是,如何?
例如,
./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
点)。