2012-08-01 63 views
0

可能重複:
Converting 32-bit unsigned integer (big endian) to long and back在Java中使用Unsigned int 32位?

我想在Java中,這表達

char tab[100]; 
tab[10] = '\xc0'; 

tab[48] = '\x80'; 

uint32_t w = 0x67452301; 

uint32_t x = 0xefcdab89; 

uint32_t y = 0x98badcfe; 

uint32_t z = 0x10325476; 

a = ((b & c) | (~b & d)) + (*(uint32_t*)(tab+0x00)) + a - 0x28955B88; 

a = ((a << 0x07) | (a >> 0x19)) + b; 

I'have嘗試這種轉換,但...

char[] tab = new char[64]; 

tab[10] = (char) 0xc0; 
tab[48] = (char) 0x80; 

但值不是正確的,有沒有另一種方式來分配char []中的\ 0x80? 我如何解釋這種類型的演員在java((uint32_t))?

非常感謝!

+1

代表無符號的32個變量中有爪哇無無符號的32位的int。您必須使用long(帶符號的64位)。 – 2012-08-01 12:21:19

+0

數組不能被當作Java中的指針 - 你必須使用顯式數組索引。 – 2012-08-01 12:22:35

+0

(也請注意,字符是Java中的16位)。 – 2012-08-01 12:23:05

回答

5

類型int是4個字節,即java中的32位。所以來自C的常規32位int可以被翻譯爲java中的常規int。

無符號整型是不是由java語言支持的,所以使用long包含8個字節從C.

+0

「包含8個字節的長」?我的理解是否正確?長是64位。 – 2014-01-31 00:59:49

+0

我一開始並沒有得到它,但在閱讀那篇文章之後,它是有道理的。 http://jessicarbrown.com/resources/unsignedtojava.html 也是文章使用「&0xffffffffL」爲了正確翻譯長。 – Sauleil 2014-06-20 14:46:25

+0

int是32位,長32位的cint32_t中的64位是相同的,uint32_t會相互關聯多久?因爲如果我總共有8個字節的數據,最終結果會增加到16個字節。 – Parth 2017-08-14 07:19:10