2014-01-22 54 views
3

使用SMPP協議我使用long表示system_id字段的類型unsigned int(4字節)的值。在協議本身中,字段值以十六進制格式指定。 所以我想保存在我的代碼中。雖然試圖比較變量值我寫道:我能以某種方式使用0x表示法

long id = ...; 
//... 
if(id == 0x80000009){...} 

並且發現了Java的解釋0x80000009int,這是簽署4字節整型,所以溢出發生和比較失敗:

id   == 2147483657 
0x80000009 ==-2147483639 

然後我嘗試了顯式類型轉換,即id == (long)0x80000009 - 結果相同。 然後,我聲明如下變量:

static final long bind_transceiver_resp = 0x80000009; 

但它仍然是一個溢出int值。

那麼有沒有辦法使用0x表示法的值大於Integer.MAX_VALUE

回答

6

在文字的末尾加上L。 0x80000009L是2147483657.請注意,小寫字母l也適用,但我不推薦這麼做,因爲在很多字體中,它看起來像是頭號字體。

+0

非常感謝...我也非常感謝一個鏈接到更廣泛的描述可能的文字用法 – horgh

+2

也許這頁在http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html將滿足您的需求(雖然我很驚訝它不提八進制)。 –

相關問題