2017-02-25 7 views
2

채팅 응용 프로그램을 작성 중입니다. 내 친구가 서버를하고있다. 그리고 서버가 내 메시지를 읽으려면 메시지 유형 인 첫 번째 1 바이트와 메시지 길이 인 두 번째 4 바이트를 사용하여 바이트 단위로 메시지를 보내야합니다. 자바에서는 다음과 같은 옵션을 사용할 수 있습니다 : ByteArray.allocate (4) .putInt (length). 그것에 상응하는 것이 있나요? 내가 시도 무엇길이 4의 바이트에 int를 씁니다.

는 :

static byte[] DecimalToByteArray(decimal src) 
{ 
    using (MemoryStream stream = new MemoryStream(4)) 
    { 
     using (BinaryWriter writer = new BinaryWriter(stream)) 
     { 
      writer.Write(src); 
      return stream.ToArray(); 
     } 
    } 
} 
+0

'decimal '은 질문과 무슨 관련이 있습니까? 그리고 왜 당신은'decimal '을 사용해야합니까? –

+0

이 질문을 잘 생각하는 사람들을 위해 - 사용중인 검색 엔진은 스너프가 아님 - https://www.bing.com/search?q=c%23+int+to+byte+array –

답변

0

나는 당신이 바이너리 메시지를 전송 및 수신의 아이디어를 종료하고 정말, XML, JSON, 바이너리 아무것도하지만, 같은 일부 텍스트 형식을 사용하도록 간청 심각합니다.

바이너리 형식 사용을 주장하는 경우 BinaryWriterMemoryStream 접근 방식은 완벽합니다.

어떤 이유로, 당신이 좋아하지 않는 경우에, 당신이 시도 할 수 있습니다 :

byte[] bytes = new byte[5]; 
bytes[0] = messageType; 
bytes[1] = (byte)(messageLength & 0xff); 
bytes[2] = (byte)((messageLength >> 8) & 0xff); 
bytes[3] = (byte)((messageLength >> 16) & 0xff); 
bytes[4] = (byte)((messageLength >> 24) & 0xff); 
+0

감사합니다. 팁. 그것을 시도 할 것이다. 메시지는 다음과 같이 구성됩니다. 1Byte (MessageType) + 4Byte (JSONLength) + JSONMessage. 따라서 Byte는 JSON 메시지의 길이 만 확인합니다. – TheWaII

1

4 바이트의 배열로 정수를 변환 BitConverter::GetBytes Method (Int32) 있습니다.

Java와 달리 출력 배열의 엔디안을 제어 할 수 없습니다. 리틀 엔디 언 또는 빅 엔디안으로 필요하면 BitConverter.IsLittleEndian을 확인하고 필요한 경우 어레이를 반대로해야합니다.

관련 문제