2015-07-12 6 views
0

У меня есть приложение на стороне сервера, написанное в D, а мое клиентское приложение написано на C#. Я использую BinaryWriter для связи между ними, но у меня проблема с порядком байта.C# binary writer ushort bytes order

На самом деле порядок байтов не то же самое, например:

C# Клиент:

MemoryStream ms = new MemoryStream(); 
BinaryWriter writer = new BinaryWriter(ms); 
writer.Write((ushort)0x01); 
writer.Write("test"); 

Клиент Выход:

[1, 0, 4, 116, 101, 115, 116] 

выход Сервер:

[0, 1, 0, 4, 116, 101, 115, 116] 

Для кли первые два байта были инвертированы, а строка в моем приложении сервера закодирована с длиной ushort, можно «изменить» поведение BinaryWriter или мне нужно создать мою собственную реализацию?

Edit: на стороне сервера пакет сериализатору: https://github.com/Adwelean/EmperadorServer/blob/master/source/vendor/cerealed/cerealiser.d

+2

его не инвертировано. один ноль добавляется первым –

+0

Если я пишу ushort с сервером, то байт-массив равен [0, 1], а с клиентом байтовый массив равен [1, 0] – Adwelean

+0

Я думаю, что сервер использует большой порядковый номер и клиент мало использует endian order ... –

ответ

3

Согласно документу MSDN, BinaryWriter магазины UInt16 в маленьком формате с обратным порядком байтов. Таким образом, возможно иметь обратный записанный порядок байтов.

https://msdn.microsoft.com/en-us/library/8sh9zw1e(v=vs.110).aspx

Я думаю, вы можете обратиться к этой должности для того, как использовать большой обратный порядок байт для записи.

BinaryWriter Endian issue

+0

Спасибо, теперь я использую Big Endian, и это работает :) – Adwelean