2012-04-21 137 views
-3

在linux中,如何檢查給定的輸入是在uint8_t或uint16_t或uint32_t中?如何比較給定的輸入與他們?輸入格式驗證

+3

我們在談論什麼樣的輸入?通過控制檯,文件,GUI ...? – Raveline 2012-04-21 12:58:57

+0

來自文件。例如,我從文件中讀取輸入745,我如何檢查它是否有效? – 2012-04-21 13:03:10

+0

你必須縮小一點。許多數字可能都是以上所有。 – juanchopanza 2012-04-21 13:10:34

回答

0
uint16_t value = boost::lexical_cast<uint16_t>(str); 

如果輸入字符串無法轉換,它將拋出bad_cast異常。

+0

是否有任何其他方法來檢查? – 2012-04-21 13:09:13

+0

是的。它是編程,有一百或上千種其他方式來完成它。 – 2012-04-21 13:33:10

0

如果你的意思是輸入從文件或控制檯讀取一個數字,那麼就做一個if語句是這樣的:

#define max_uint8 (1<<8) - 1 
    #define max_uint16 (1<<16) - 1 
    #define max_uint32 (1<<32) - 1 


    if(input > max_uint32) { 
     // then it is greater than 32 bits 
    } else if (input > max_uint16) { 
     // then it is uint32 
    } else if (input > max_uint8) { 
     // then it is uint16 
    } else { 
     // then it is uint8 
    } 

注:我認爲你的投入將不會超過32位,否則你需要檢查這個。

+0

如果輸入大於32位,該怎麼辦? – 2012-04-21 13:19:05

+0

@Umarniaz你只需要檢查這一點。以64位整數(即long long)讀取您的數字,再添加一個[(1 << 32) - 1]的值並調整if條件。我在上面編輯它。 – iBrAaAa 2012-04-21 13:44:53