2012-03-09 3 views
1

мне нужно декодировать двоичные данные (C#), представленных структурами как в этом примере:декодирование сообщения двоичного протокола не кодируемые одним и тем же инструментом

struct Message 
{ 
    byte id; 
    int type; 
    bool valid; 
} 

и пример двоичных данных: 0x040000000201, где ID = 4, тип = 2, valid = true;

Могу ли я использовать Thrift, Protocol Buffers или любой другой инструмент для декодирования двоичных данных, которые не были закодированы одним и тем же инструментом? Можете ли вы дать какие-либо рекомендации относительно того, как это сделать?

Спасибо

+0

Проверьте выбранный ответ на http://stackoverflow.com/questions/2480116/marshalling-a-big-endian-byte-collection-into-a-struct-in-order-to-pull-out-valu – Matthew

ответ

2

Нет, в основном. Они разработаны как независимые от платформы универсальные инструменты сериализации, каждый из которых следует заранее определенному протоколу (/ wire-format), что означает: стандартным пользователям обычно не нужно знать и не заботиться о том, как выглядят данные - это работа инструмента отвлечь это.

В вашем случае предварительно установленный формат провода вряд ли будет похож на любой такой инструмент. Вам понадобится более конкретный инструмент, который позволяет вам указывать очень мелкие детали протокола, или вам нужно будет написать код для сериализации/десериализации вручную.

В конечном счете это не похоже на вопрос: «Можно ли использовать JavaScriptSerializer для чтения моего XML-документа?». На что ответ просто: «нет, JavaScriptSerializer expecs JSON и не имеет возможности указывать или интерпретировать XML-данные».