1

私が書いた任意精度の整数クラスの場合、整数の値を含む文字列と、文字列がどのベースにあるかを示す uint16_t を受け入れるコンストラクターがあります。

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

私のクラスは負の数も受け入れることができるので、コンストラクター-は値が負であることを意味すると読み取ります--ASCII 文字列の前に があいまいにならないようにコードを変更するにはどうすればよいですか? ------(基数 10 の正の 49672054713645) と------(基数 10 の負の 194031463725 )である入力文字列をどのように区別しますか?

現在、すべての ASCII 値を正と見なしています。

コンストラクターが 2 つの引数のみを受け入れるようにしたいと考えていますが、明らかな場合: コンストラクターを変更/分割/追加することinteger(positive/negative, string, base)が唯一の良いアイデアである場合は、それを検討することができます。

4

1 に答える 1

1

私が見たそのような文字列から整数へのルーチンのほとんどは、2 から 36 までの基数のみを許可し、基数 36 は文字セットを使用します[0..9, a..z]。「ベース 256」をサポートする場合は、正の値のみをサポートすることをお勧めします。(結果が負であることがわかっている場合、呼び出し元は結果を否定することができます。)

ついでに、2 から 256 までのすべての中間基数をサポートする必要があるかどうかについても自問する必要があるかもしれません。サポートする必要がある重要な不連続点がいくつかあります。たとえば、基数 16 では、大文字と小文字の両方が同じように扱われ (「基数 256」の場合はそうではありません)、9 (0x39) と A (0x41) の間にギャップがあり、すべての通常の基数では、 「0」(0x30) はゼロであり、NUL (0x00) ではありません。

于 2012-07-14T03:57:47.767 に答える