Nano Hash - криптовалюты, майнинг, программирование

Тип проводки буфера протокола Google начальная группа и использование конечной группы

Попытка проанализировать сообщение с сервера, который передает тип проводки как Start Group. Я использую библиотеку protobuf-c, в которой начальная группа и конечная группа не поддерживаются (последние). Есть ли какие-либо примеры того, как работать с типом провода в качестве начальной группы, чтобы я мог анализировать сообщение самостоятельно?

заранее спасибо


Ответы:


1

Для фона «группы» — это другой способ представления подсообщения. Они объявляются так:

message Foo {
  repeated group bar = 1 {
    optional int32 baz = 2;
    optional string qux = 3;
  }
}

Семантически это почти то же самое, что:

message Foo {
  repeated Bar bar = 1;
  message Bar {
    optional int32 baz = 2;
    optional string qux = 3;
  }
}

Однако кодировка немного отличается (поясняется ниже).

Группы уже устарели в то время, когда исходный код Protobuf был впервые открыт, поэтому многие реализации, отличные от Google, не поддерживают группы. У Google есть несколько очень старых протоколов, которые до сих пор используют группы, но, вероятно, никто за пределами Google не должен использовать группы, поэтому я предполагаю, что протокол, с которым вы работаете, принадлежит Google. (Если нет, возможно, вы просто испортили данные.)

Я предполагаю, что вы уже читали документы по кодированию, но они не t объяснить группы.

Группы кодируются, начиная с тега «начальная группа», за которым следует содержимое подсообщения, за которым следует соответствующий тег «конечная группа». Это единственный случай в protobufs, когда тег появляется в конце значения — во всех остальных случаях тег появляется только в начале.

Напротив, обычные подсообщения (как во втором примере выше) кодируются с использованием типа проводника «с разграничением по длине»: тег, за которым следует размер подсообщения, за которым следует содержимое. Обратите внимание, что кодирование с разделителями по длине означает, что вы можете пропустить вложенное сообщение, не анализируя все его поля; с группой единственный способ узнать, где заканчивается группа, — это анализировать каждое поле, пока вы не увидите тег end-group.

20.11.2015
  • Спасибо за информацию, это мне очень помогает. 20.11.2015
  • Ссылка больше не документирует проводной формат групп. Может ли кто-нибудь знающий обновить ответ, чтобы показать двоичное представление простого встроенного сообщения и эквивалентную групповую кодировку одного и того же сообщения? 27.03.2021
  • @TomášHübelbauer Ссылка никогда не документировала группы, поэтому я сказал, что они не объясняют группы, а затем я объяснил кодировку в следующем абзаце. Не существует такой вещи, как эквивалентное групповое кодирование подсообщения. Групповое кодирование используется только для кодирования групп, которые объявляются иначе, чем вложенные сообщения (см. пример выше). 29.03.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..