2013-08-24 55 views
0

我有一個函數,其中計算值可以達到比由MS表示的無符號__int64範圍更高的值18,446,744,073,709,551,615。如何測試一個數字是否超出了該範圍?我已經將int轉換爲char,並通過使用strlen檢查長度來嘗試進行測試。但是,一些長度超過指定長度的值:例如if(strlen(charvar)> 17)神祕地逃脫。那麼如何有效地測試?如何測試無符號__int64數字是否超出範圍

+0

這是爲了將字符串轉換爲數字嗎?什麼語言? (類C,但是C或C++?) – sfjac

+0

C++,它用於在OpenCV中顯示圖像中的值(因此我需要使用_ui64toa將它們轉換爲char)。我只想顯示「正確的」。顯示它們是沒有問題的,但是如果我使用strlen函數來清除有問題的函數,它並不總是有效。 – user1331044

+0

VS 2008,什麼是提升?請看看,這是不是有一些簡單的測試方法?如果我可以測試數字數字超過19或18,那就足夠了。 – user1331044

回答

1

如果你可以用一個現代的編譯器或升壓,然後lexical_cast將做的工作:

uint64_t bigint; 
try { 
    bigint = lexical_cast<uint64_t>(str); 
} catch (std::bad_lexical_cast &e) { 
    // do whatever you want to do when the string isn't valid; 
} 
// Safely use bigint 

this link爲Boost庫。你絕對可以得到這VS 2008。

如果這只是Windows,你也可以看看_atoi64之類的。見msdn。如果出現上溢/下溢,則返回I64_MAXI64_MIN

+0

我得到錯誤C2065:'lexical_cast':未聲明的標識符,所以我需要安裝Boost我想。如果沒有簡單的解決方案,我可能會嘗試找到替代方案(我可以測試圖像中數字的寬度)。無論如何,Thx爲您提供幫助! – user1331044

+0

你需要轉移到VS2012(VC 11)才能從工作室獲得這些。 Boost將把它們放在'boost ::'命名空間中。但'_atoi64'就足夠了。 – sfjac

+0

_atoi64聽起來很有希望。我會試一試。 – user1331044