将ASCII字符串转换为数字

时间:2012-07-14 03:46:26

标签: coding-style ascii decoding ambiguity

对于我写的任意精度整数类,我有一个构造函数接受一个包含整数值的字符串和一个uint16_t来说明字符串所在的基数。

integer("123", 10) -> 0x7b   -> 123   base 10
integer("ab", 256) -> 0x6162 -> 24930 base 10

由于我的类也可以接受负数,因此构造函数读取-表示值为负,带有-的基本256字符串(ASCII),因为第一个字符会混乱。我应该如何更改我的代码,使ASCII字符串前面的-不明确?我如何区分------(基数10中为正49672054713645)和------(基数为10中为负194031463725)的输入字符串?

目前,我正在考虑所有ASCII值为正值。

我希望让构造函数只接受2个参数,但如果显而易见:更改/拆分/将构造函数添加到integer(positive/negative, string, base)是唯一的好主意,我可以考虑一下

1 个答案:

答案 0 :(得分:1)

我见过的大多数这样的字符串到整数例程只允许2到36的基数,而基数36使用字符集[0..9, a..z]。如果你决定支持“base 256”,我建议你只支持正值。 (如果他们碰巧知道结果是负面的,那么来电者就可以否定结果。)

顺便提一下,您可能想要问自己的另一个问题是,您是否需要支持2到256之间的所有中间基础。您需要支持一些重要的不连续性;例如,在基数16中,大写和小写字母都被相同地处理(对于“基数256”不是这种情况)并且在9(0x39)和A(0x41)之间存在间隙,并且在所有普通基数中, '0'(0x30)为零,而不是NUL(0x00)。