Изменение table_name
и field
для соответствия имени таблицы и рассматриваемому полю:
UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
Вы начинаете с определения вашего сообщения в файле .proto:
package foo;
message snd_data {
required string var= 1;
required int32 var1 = 2;
optional float var2 = 3;
optional double var3 = 4;
}
(я полагаю, что float и double на самом деле разные переменные ...)
Затем вы компилируете его, используя ] protoc
, а затем у вас есть код, реализующий ваш буфер.
Для получения дополнительной информации см .: http://code.google.com/apis/protocolbuffers/docs/cpptutorial.html
Обе машины x86? В противном случае вам нужно следить за различиями с прямым и обратным порядком байтов. Также стоит обратить внимание на упаковку структуры. Передача указателя также может быть проблематичной из-за того, что указатели имеют разные размеры на разных платформах. В общем, в вашем посте слишком мало информации, чтобы с уверенностью сказать, что происходит не так ...
Ответ заключается в порядке байтов передаваемых данных, это то, что вам нужно очень внимательно рассмотреть и проверить. Посмотрите здесь , чтобы показать, что может делать порядок байтов и приводить к искажению данных как на получателе, так и на отправителе. Не существует такой идеальной меры плавной передачи данных, просто потому, что данные, отправленные из окна unix, гарантируют, что данные в окне окна будут в том же порядке с точки зрения структуры памяти для данных. Кроме того, заполнение структуры в блоке unix будет отличаться от заполнения в блоке Windows, оно сводится к тому, как используются переключатели командной строки, подумайте о выравнивании структуры.
Как вы пишете свои сообщения на сокет? Protobufs сам по себе не чувствителен к эндиану, но и протобуфы не определяют транспортный механизм -- protobuf определяет связку между сообщением и его сериализованной формой (которая представляет собой последовательность (8-битных) байт), и передача этой последовательности байт на удаленный хост является вашей обязанностью.
В нашем случае мы определяем очень простой транспортный протокол; сначала мы записываем размер сообщения в виде 32-битного целого числа (big endian), а затем приходит само сообщение. (Также помните, что сообщения protobuf не являются самоидентифицирующимися, что означает, что вам нужно знать, какое сообщение вы посылаете. Обычно это управляется наличием оберточного сообщения , содержащего необязательные поля для всех сообщений, которые вы хотите отправить. Дополнительную информацию об этом способе можно найти на сайте protobuf и в архивах списков рассылки)
.