Декодирование сообщений двоичного протокола, не закодированных одним и тем же инструментом - PullRequest
1 голос
/ 09 марта 2012

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

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

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

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

Спасибо

1 Ответ

2 голосов
/ 09 марта 2012

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

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

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

...