2012-07-14 125 views
1

對於任意精度的整數類我寫的,我有接受包含整數的值和uint16_t說字符串是在什麼基礎字符串的構造函數。轉換ASCII字符串到數字

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

由於我類也可以接受負數,構造函數的讀值爲-,意思是該值爲負數,基數爲256的字符串(ASCII)爲-,因爲第一個字符會造成混亂。我應該如何更改我的代碼以使ASCII字符串前面的-不含糊?我如何區分------(正數爲49672054713645,基數爲10)和------(基數爲10的負數爲194031463725)之間的輸入字符串?

目前,我正在考慮所有的ASCII值爲正值。

我希望離開構造函數只接受2個參數,但如果很明顯的:改變/分/添加構造函數integer(positive/negative, string, base)是唯一的好主意,我可能會考慮它

+0

ASCII不能以256位爲基數,因爲它是7位編碼。 2^7 = 128個ASCII值。所以你需要一個8位的ASCII擴展名,你應該指定。 – 2012-07-16 23:48:10

回答

1

大多數這樣的字符串到整數我見過的例程只允許2到36的鹼基,而基數36使用字符集[0..9, a..z]。如果你決定支持「base 256」,我建議你只支持正值。 (如果來電者知道結果是否定的,則主叫方可以否定結果)

另一個問題你可能想問自己,順便說一句,是否需要支持2和256之間的所有中間基數。有一些您需要支持的顯着不連續性;例如,在第16位中,大寫字母和小寫字母的處理方式都是相同的(「base 256」不是這種情況),並且在9(0x39)和A(0x41)之間存在間隔,並且在所有普通的基礎中, '0'(0x30)爲零,而不是NUL(0x00)。

+0

我只有輸入基數爲2,8,10,16和256.是的,我有一個說明否定任何基本256輸入 – calccrypto 2012-07-14 04:46:05