2013-06-04 26 views
1

我需要轉換成十進制數值像正確十進制值轉換爲字節值

int dec = 129; 

成字節值一樣

byte frame2 = (byte) 129; 

但正如你可能已經猜到了,把它轉換成一個意外的值。我希望字節值是129而不是-127(frame2的值)。

你怎麼能在Java中實現它?我希望有一個解釋。

謝謝

+0

不要使用字節:http://docs.oracle.com/javase/6/docs/api/java/lang/Byte.html –

+3

@DekDekku這會慢很多,但它會如何幫助?你能證明你的意思嗎? –

+0

我只是說不要使用字節。也不是Byte,這對於這個事情來說是完全一樣的。 –

回答

7

你不能也很可能你不需要。根據定義,一個字節是-128到127。但是,如果您需要編碼,則可以將任何256個不同的值存儲在一個字節中。

byte b = (byte) 129; 
int i = b & 0xff; // == 129 

byte b = (byte) (129 + Byte.MIN_VALUE); 
int i = b - Byte.MIN_VALUE; // also 129. 
+1

+1我會說這個字節是正確的,它既是-127也是129,這更多的是表示/使用字節的問題。 –

+0

謝謝,我解決了它 – Jason

1

我需要轉換成十進制數值像

停在那兒。沒有「十進制值」這樣的東西。有值是2s補碼,並有小數點表示。

int dec = 129; 

這將被存儲爲129(10),或81(16)。

成字節值一樣

byte frame2 = (byte) 129; 

的,其結果將是-127,因爲字節在Java中籤署,您的值設置標誌位。

如果要使用該值,就像是129一樣,請使用(frame2 & 0xff).但是,根本不需要那麼做。

您的問題實際上是關於Java中字節的符號擴展:它與小數完全無關。