2013-12-21 1 views
0

C#에서 다음 문장을 재현하려고합니다. 절차에 표시된대로 packlength길이 값 (네트워크 바이트 순서 - 큰 엔디안)을 나타내는 '! l'형식으로 압축 된 문자열입니다.C#의 Python의 Struct.Pack

using (MemoryStream stream = new MemoryStream()) { 
     using (BinaryWriter writer = new BinaryWriter(stream)) { 
        writer.Write ((long)(packetData.Length+10)); 
     } 
} 

절차 정확 :

packlength=struct.pack('!l', len(packetdata)+10) 

나는 다음과 같은 시도? 그렇다면 어떻게 메모리 스트림에서 결과 "문자열"에 액세스합니까?

답변

1

C 번호에 해당이

var bytes=BitConverter.GetBytes((long)packetdata.length) 

UPDATE : 존 스키트 당신은이 코드를 사용할 수 있습니다

http://www.yoda.arachsys.com/csharp/miscutil/

+0

@DavidHeffernan : 네, 맞습니다. –

1

다음 링크에서 바이트 order.check과 재생을위한 아주 좋은 lib에 있습니다 :

byte[] bytes = BitConverter.GetBytes(
    IPAddress.HostToNetworkOrder((long)packetdata.length + 10) 
); 

다소 나쁘게도 IPAddress.HostToNetworkOrder를 정적 메서드로 다른 클래스에 래핑하여 실현 가능성을 향상 시키려고합니다. 결국 누가 네트워크 주문 변환을 수행 할 때 IPAddress를보고 싶어합니까?

파이썬 코드가 문자열을 사용하여 버퍼를 보유하고 있지만 실제로는 문자열이 아닙니다. 왜 여기에 바이트 배열이 있는지 그리고 위 코드가 생성 한 것입니다.

+0

파이썬에서 'str' 타입은 다른 이름을 가지고 있습니다.'bytes' – Eric