2015-12-10 2 views
2

Я пытаюсь передать filedata сокетами через sslStream. Кажется, что я должен отправить длину данных файла перед данными. Проблема заключается в том, что кодКак отправить большой endian в сетевой поток с помощью C#

Byte [] size = BitConverter.GetBytes(fileData.Length) 

Возвращает в терминах little endian, но интернет-протоколы используют большой endian.

Как я могу преобразовать это в большой endian и записать его в поток;

+1

Возможный дубликат [Как получить Little Endian данные большой Endian в C# с помощью метода bitConverter.ToInt32?] (http://stackoverflow.com/questions/8241060/how-to-get-little-endian-data-from-big-endian-in-c-sharp-using-bitconverter- Тоин) –

ответ

0

Я предполагаю, что вы хотите отправить только одно значение int. Порядок байтов должен быть отменено перед передачей:

byte[] bytes = BitConverter.GetBytes(fileData.Length); 
if (BitConverter.IsLittleEndian) 
    Array.Reverse(bytes); 

Проверьте this MSDN page, чтобы получить более подробную информацию о BitConverted.

Вы также можете преобразовать его с помощью HostToNetworkOrder, например:

int reversed = IPAddress.HostToNetworkOrder(fileData.Length); 
byte[] bytes = BitConverter.GetBytes(reversed); 

Чтобы отправить эти байты используют Write метод:

stream.Write(bytes, 0, bytes.Length); 
Смежные вопросы