2013-12-21 6 views
0

Я пытаюсь воспроизвести следующий оператор на C#. Как показывает процедура, packlength - это строка, упакованная в соответствии с форматом '! L', которая представляет собой длинное значение (в сетевом порядке байтов - большой конец).Python's Struct.Pack в C#

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

я попытался следующее:

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

ли процедура правильно? Если да, как мне получить доступ к приведенной «строке» из потока памяти?

ответ

1

C# эквивалент

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

UPDATE: Джон тарелочкам имеют очень хорошую LIB для игры с байтовой order.check по следующей ссылке

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

+0

@DavidHeffernan: Да, вы правы –

1

Вы можете использовать этот код:

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

Это читает довольно плохо, поэтому вы хотите обернуть IPAddress.HostToNetworkOrder в другом классе, в качестве статического метода, для улучшения выполнимости. В конце концов, кто хочет видеть IPAddress при выполнении преобразования хоста в сеть?

Хотя ваш код на Python использует строки для хранения буфера, они не являются строками. Почему у вас есть массив байтов, и это то, что дает код выше.

+0

Обратите внимание, что в python тип 'str' имеет другое имя,' bytes' – Eric

 Смежные вопросы

  • Нет связанных вопросов^_^