2012-08-01 88 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