2012-04-15 3 views
2

C#으로 인코딩 된 바이트 배열에서 int를 변환하는 데 문제가 있습니다. Java가 작은 것보다는 큰 것에서 작동하기 때문에 먼저 빅 엔디 언으로 변환합니다. 다음 코드는 into를 바이트로 인코딩합니다.C#에서 처음으로 인코딩 된 Java에서 바이트 가져 오기

Console.WriteLine("A new data client has connected!"); 
    byte[] welcomeMessage = ASCIIEncoding.ASCII.GetBytes("Welcome young chap! Please let me know about anything you need!"); 

    welcomeMessage = Byte.add(BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(20)), welcomeMessage); 

Byte.add는 두 개의 배열을 함께 추가합니다. 이것은 C#에서 C# 사이에서 사용 되었기 때문에 작동합니다. 환영 메시지는 먼저 클라이언트가 정보가 무엇인지 알 수 있도록 헤더 바이트로로드됩니다. 디코딩하려고 할 때 자바 측에서 이상한 값을 얻습니다. 내가 부적절하게 디코딩하거나 인코딩하고 있는지 확신 할 수 없다. 자바 측은 그런 것이다. 이것은 안드로이드 장치에서 실행 중입니다 :

if (ByteBuffer.wrap(buffer).getInt() == 20) 
    { 
      latestMessage = new String(buffer); 
    } 
    latestMessage = String.valueOf(ByteBuffer.wrap(buffer).getInt(0)); //Lets me see what value this is. Cant attach debugger for some reason ATM. 

답변

3

ByteBufferorder() 메서드를 사용하여 멀티 바이트 값을 큰 또는 작은 엔디안으로 디코딩하도록 구성 할 수 있습니다. 예를 들어

:

final ByteBuffer bb = ByteBuffer.wrap(buffer); 
bb.order(ByteOrder.LITTLE_ENDIAN); 

final int i = bb.getInt(); 
... 
0

아마도 BitConverter 클래스가 도움이 될 수 있습니다. 보세요 here.

+0

이봐 난 그냥 바이트로 헤더 INT 변환 라인을 포함하는 것을 잊었다 깨달았다. 나는 그것을 적절하게 바꿨다. –