2011-05-21 181 views
2

我試圖從一個配置文件讀入一串無符號整數到一個類中。這些數字可以在base-10(例如:1234)或base-16(例如:0xAB31)中指定。因此在C#2.0中尋找等效的strtoulstrtoul相當於C#

更具體地說,我感興趣的是一個C#函數,它在模擬此函數的行爲時,指示基數或基數的參數被傳入爲零。 (在C++中,strtoul會嘗試基於字符串中的第一對字符猜出基數或基數,然後繼續轉換數字)

當前我手動檢查前兩個字符(使用string.Substring()方法),然後根據需要調用Convert.ToUInt32(hex, 10)Convert.ToUInt32(hex, 16)

我確信必須有更好的方法來處理這個問題,因此這篇文章。更優雅的想法/解決方案或解決方案將是很大的幫助。

回答

5

好了,你不需要使用子串,除非它在十六進制,但它聽起來像你基本上是做正確的方式:

return text.StartsWith("0x") ? Convert.ToUInt32(text.Substring(2), 16) 
          : Convert.ToUInt32(text, 10); 

顯然,這將創建Substring一個額外的對象電話,而你可能會編寫你自己的十六進制解析代碼來應對這種情況 - 但除非你已經遇到這種方法的性能問題,我會保持簡單。

+0

感謝您使用更簡潔的語法。我沒有想到使用'StartsWith()'。我正在閱讀大約50個值,所以輕微的表現沒問題。此外,這是否意味着沒有庫函數來執行此操作? (在C#中定製/​​自己實現'strtoul'看起來對於這個小問題的矯枉過正恕我直言) – 2011-05-21 07:05:40

+0

@Bhargav:這意味着我不知道*庫函數做這個:) – 2011-05-21 07:10:00