2010-01-07 3 views
0

저는 C#에서 JAVA로 포팅하는 중이에요. 바이트를 원시로 변환 할 수있는 클래스가 필요합니다. .NET의 BitConverter만이 할 수 있습니다.확인해주십시오 :이 변환기는 바이트 배열을 Big-Endian으로 읽습니까?

// C# code 
byte[] b2 = new byte[] { 0, 1 }; 
short b2short = BitConverter.ToInt16(b2, 0); 

256 == b2short 예상대로 : 난 그냥 here을 기록으로

, 내 컴퓨터가 사용하는 리틀 - 엔디안 (인텔)와 BitConverter가 예상대로 작동 지적했다.

글쎄, 자바에서 "BitConverter"가 필요하고 this piece of code을 찾았습니다. 그러나, 내가 자바에서 시도 할 때 그 방법은 빅 엔디안으로 바이트 배열을 해석하는 것 같다. 자바 코드 :이 경우

// JAVA code 
byte[] b2 = new byte[] { 0, 1 }; 
short b2short = MyFoundConverter.BitConverter.toShort(b2, 0); 

, b2short == 1, 즉 빅 - 엔디안처럼 날 것으로 보인다.

질문 : 해당 비트 연산자를 알고있는 누군가가 on this webpage 바이트 배열을 Big-Endian으로 해석하는지 실제로 알 수 있습니까?

이렇게이라면, 리틀 엔디안을 만들 수있는 쉬운 방법이 있습니까?

감사

답변

1

코드 :-) 생각 첫 번째 바이트를 가져 와서 단락의 상위 바이트로 만듭니다. 두 번째 바이트는 short의 하위 바이트로 이동합니다. 그래서 이것은 빅 엔디안 연산입니다. 코딩 방식에 따라 메서드를 사용하여 배열 인덱스를 스와핑하는 것 이외에 가장 쉬운 인덱스가 가장 낮아 지므로이 문제를 해결하는 쉬운 방법은 없습니다.

another code bit 데이터 유형을 가져 와서 해당 엔디안을 스왑합니다. 어쩌면 둘을 결합 할 수 있습니다.

+0

Thx, 배열 색인을 교체하여 수동으로 선택합니다. IT가 몇 분 동안 작동 한 다음 계속 진행하는 경우 =) – Ted

0

당신이 필요로하는 코드는 다음과 같습니다

byte[] b2 = new byte[] { 0, 1 }; 
short b2short = b2[0] | (b2[1] << 8); 

및 INT 값에 대한

:

byte[] b4 = new byte[] { 0, 1, 2, 3 }; 
int b4int = b4[0] | (b4[1] << 8) | (b4[2] << 16) | (b4[3] << 24); 

당신은 얻을 당신이에 연결

관련 문제