[Google Protobuf] For C++ in Linux - Basic example code 기본 소스 코드 사용 샘플
반응형
[Google Protobuf] For C++ in Linux - Basic example code
※ 관련글
- Google Protobuf
- [Google Protobuf] For Java in Android Studio - 설치 및 proto 파일 컴파일
- [Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용
- [Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플
- [Google Protobuf] For C++ in Linux - Settings C++ 빌드 환경 만들기
- [Google Protobuf] For C++ in Linux - Basic example code 기본 소스 코드 사용 샘플
- Nanopb Basic type value example
- [Nanopb for Google protobuf] Basic type proto sample
- [Nanopb for Google protobuf] Basic type proto sample - Sample proto file
- [Nanopb for Google protobuf] Basic type proto sample - Encode sample code
- [Nanopb for Google protobuf] Basic type proto sample - Decode sample code
- Nanopb String / bytes value example
- [Nanopb for Google protobuf] String/Bytes type proto
- [Nanopb for Google protobuf] String/Bytes type proto - Sample proto file
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 1
- [Nanopb for Google protobuf] String/Bytes type proto - Encode example code 2
- [Nanopb for Google protobuf] String/Bytes type proto - Decode example code
- Nanopb basic submsg example
- [Nanopb for Google protobuf] Sub message - Example proto file
- [Nanopb for Google protobuf] Sub message - Encode example code
- [Nanopb for Google protobuf] Sub message - Decode example code
- Nanopb array submsg value example
# 객체를 생성하여 byte 배열로 만드는 샘플
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
void protoObjTest::startTest() { LOGD("Test Proto buf Start", 0); GOOGLE_PROTOBUF_VERIFY_VERSION; LOGD("Test Proto checked version", 0); test::PeriodicPos testProtoObj; // protobuf 파일에서 만든 객체 정의
makeOneObj(&testProtoObj); //객체에 넣고 싶은 내용들을 넣는다. 내부에 있는 List 도 정의
// 위에서 정의된 객체를 byte 배열로 만들 때 필요한 byte 크기를 받는다. long size = testProtoObj.ByteSizeLong(); LOGD("Test Proto After make. size:%d", size); // 확인한 크기로 버퍼를 만든다.
char * buffer = new char[size]; // buffer 에 바이트 배열 데이터를 얻어 온다.
testProtoObj.SerializeToArray(buffer, size); LOGD("Test Proto After make. strTemp:%s", buffer); delete[] buffer; }
void protoObjTest::makeOneObj(test::PeriodicPos *obj){ obj->set_engineonoffstatus(test::PeriodicPos::EngineOnOffStatus::PeriodicPos_EngineOnOffStatus_ON); obj->set_rundistance(2000000); obj->set_timefor1stpos("20190109201201"); obj->set_intervaltimeforpos(10); for(int idx = 0; idx 12; idx++){
test::PeriodicPos::Pos *pos = obj->add_poslist(); pos->set_lat(127.1261233); pos->set_lon(37.4498712); pos->set_speed(10+idx); } } | cs |
# Serialize 된 byte 배열 정보를 객체화 시키는 예제.
Serialize 된 정보가 test.txt 파일에 만들어져 있는 것을 객체화 시키는 방법이다.
통신으로 받은 데이터 역시 유사한 방법으로 처리하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void protoObjTest::testReadFileForObjBin(){ std::string filePath = "/home/XXXXX/testProtoObjBin/test.txt"; { // 원복한 데이터 저장을 위한 객체 정의
test::PeriodicPos tempPosList; //파일에서 데이터 읽어 온다.
std::fstream input(filePath, std::ios::in | std::ios::binary); //byte 정보를 객체화 시킨다. 에러가 발생 시 true가 리턴된다.
if (!tempPosList.ParseFromIstream(&input)) { LOGD("Failed to parse tempPosList.", 0); return; } // 객체 데이터 확인을 위한 출력 코드 아래쪽 추가 설명 참조.
std::string strTemp = ProtoToJson(tempPosList); LOGD("Test Proto After make. strTemp:%s", strTemp.c_str()); } } | cs |
# protobuf 객체는 json형태로 출력이 가능하다.
디버깅을 위하여 사용할 수 있어 찾아봤던 함수를 같이 샘플로 남긴다.
api는 아래 include가 필요하다.
#include "google/protobuf/util/json_util.h"
1 2 3 4 5 6 7 |
std::string protoObjTest::ProtoToJson(const google::protobuf::Message& proto) { std::string json; // 객체의 정보를 스트링 형태로 얻어 오는 함수 이다.
google::protobuf::util::MessageToJsonString(proto, &json); return json; } | cs |
# 주의 사항
1. protobuf 메모리 누수 관련 사항이 검색을 통하여 찾아보면 상당수 있다.
코드 구현 시 메모리 누수 가 없는지 체크를 진행하여야 할 것이다.
2. google protobuf 사용을 위하여 메모리가 필요한데 32bit 마이컴들은 적용이 불가한 것 같다.
rom/ram 사이즈 문제
32bit mcu 를 위하여 nanopb 라는 것을 사용할 수 있다고 한다.
반응형
'IT > C, C++' 카테고리의 다른 글
[Nanopb] Basic type proto sample - Sample proto file (0) | 2020.01.30 |
---|---|
[Nanopb] Basic type proto sample (0) | 2020.01.30 |
[Google Protobuf] For C++ in Linux - Settings C++ 빌드 환경 만들기 (0) | 2020.01.30 |
[Google Protobuf] For Java in Android Studio - Basic example code 기본 소스 코드 사용 샘플 (0) | 2020.01.30 |
[Google Protobuf] For Java in Android Studio - Gen Java 파일 Android Studio 적용 (0) | 2020.01.30 |