GoogleProtocolBuffer(C++)で、NULL文字(/0, 0x00)を含むデータをパースする方法
GoogleProtocolBufferのC++版で、NULL文字を含むデータをパースする際にハマったのでメモ。
socket通信のrecv()で受け取ったデータをParseFromString()でパースしようとした際、 データに"0x00"が出現するとヌル文字(\0)だと解釈して、パースが正常終了しませんでした。
結論としては、char型の配列をstring型に変換し、かつ変換の際にサイズを指定してやればOKでした。
/*** 初期設定などなど省略 ***/ char buf[BUF_SIZE]; ProtobufClass proto; // プロトコルバッファのメッセージ解析用インスタンス size_t recv_size; recv_size = recv(sock, buf, sizeof(buf), 0); std::string str(buf, recv_size); proto.ParseFromString(str);