Я работаю над внедрением protobufs для IPC для проекта. По какой-то причине значения, для которых установлено значение 0, не устанавливаются/не сериализуются. Для контекста файл .proto содержит следующее сообщение:
syntax = "proto3";
enum SetGet {
SET = 0;
GET = 1;
}
message State {
SetGet setget = 1;
double x = 2;
double y = 3;
double depth = 4;
double yaw = 5;
double pitch = 6;
double roll = 7;
}
Я компилирую файл в файл Python _pb2 с протоколом, а затем пытаюсь запустить следующий тестовый скрипт:
import filename_pb2 as pb
state = pb.State()
state.x = 0
state.y = 0
state.depth = 0
state.yaw = 0
state.pitch = 0
state.roll = 0
state.setget = pb.SET
print("State: {}".format(state))
state2 = pb.State()
state2.ParseFromString(state.SerializeToString())
print("State2: {}".format(state2))
Когда я запускаю его, печатается следующий вывод:
State:
State2:
Кажется, что ничего не устанавливается или нулевые значения каким-то образом игнорируются. Однако, когда я меняю значения (x, y, depth и т. д.) на что-то отличное от нуля, скажем, 0,1, я получаю следующий ожидаемый результат:
State: x: 0.1
y: 0.1
depth: 0.1
yaw: 0.1
pitch: 0.1
roll: 0.1
State2: x: 0.1
y: 0.1
depth: 0.1
yaw: 0.1
pitch: 0.1
roll: 0.1
Несмотря на то, что числа распечатаны, перечисление по какой-то причине все еще нет. Почему это происходит с protobufs? Является ли двойной тип 0 по умолчанию, поэтому сериализатор protobuf экономит место, игнорируя их? Почему же тогда они не восстанавливаются при разборе State2? Есть ли какая-то строка в документации, которую я пропустил? Заранее спасибо!
-- Тим