1

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

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

由于我的类也可以接受负数,因此构造函数读取-的意思是该值为负数,带有-as is first 字符的 base 256 字符串 (ASCII) 会使事情变得混乱。我应该如何更改我的代码以使-ASCII 字符串前面的 a 不模棱两可?我如何区分输入字符串------(以 10 为底的正 49672054713645)和------(以 10 为底的负 194031463725)?

目前,我认为所有 ASCII 值都是正数。

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

4

1 回答 1

1

我见过的大多数此类字符串到整数的例程只允许从 2 到 36 的基数,基数 36 使用字符集[0..9, a..z]. 如果您决定支持“base 256”,我建议您只支持正值。(如果他们碰巧知道结果是否定的,调用者可以直接否定结果。)

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

于 2012-07-14T03:57:47.767 回答