2012-08-01 1 views
0

가능한 중복 :
Converting 32-bit unsigned integer (big endian) to long and backJava에서 부호없는 int 32 비트 사용?

내가

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을 할당하는 또 다른 방법이 있습니까? 어떻게 이런 종류의 자바 ((uint32_t)) 캐스트 캐스팅 할 수 있습니까?

감사합니다.

+1

에서 부호없는 32 개 비트 변수를 나타내는 8 바이트를 포함 long를 사용하지 않습니다. 대신 긴 (부호가있는 64 비트)을 사용해야합니다. –

+0

배열을 Java에서 포인터로 처리 할 수 ​​없습니다. 명시 적 배열 인덱싱을 사용해야합니다. –

+0

(문자는 Java에서 16 비트 임) 또한 –

답변

5

유형 int은 java에서 32 비트 인 4 바이트입니다. 따라서 C에서 제공하는 32 비트 정수는 java에서 정규 int로 변환 될 수 있습니다.

서명되지 않은 INT는 자바 언어를 지원하므로 자바에는 부호없는 32 비트 INT는 없다 C.

+0

"길이가 8 바이트"입니까? 나는 정확하게 이해하고 있는가? Long은 64 비트입니다. –

+0

처음에는 이해하지 못했지만이 기사를 읽은 후에는 의미가있었습니다. http://jessicarbrown.com/resources/unsignedtojava.html 또한이 기사에서는 '& 0xffffffffL'을 사용하여 적절하게 길게 번역합니다. – Sauleil

+0

int는 32 비트이고 long은 32 비트의 uint32_t에서 64 비트와 동일하며 uint32_t는 서로 관련됩니까? 최종 결과에서 총 8 바이트의 데이터가있는 경우 16 바이트로 증가하기 때문입니다. – Parth