2017-12-03 30 views
1

protobuf에서는 부호있는 또는 부호없는 32 비트 또는 64 비트 정수를 사용하여 값 범위를 제한 할 수 있습니다.protobuf에서 최대 값을 설정할 수 있습니까?

그러나 정의하고 싶은 데이터 구조에는 8 비트, 16 비트 및 32 비트 정수가 혼합되어있어 임베디드 장치의 공간을 절약합니다. 또한 데이터 구조는 약간 다르게 구현되며 일부 필드에 예약 된 특수 값이 필요하므로 최대 값은 2의 제곱 수가 아닙니다.

이러한 임베디드 장치에서 protobuf 정의는 전송 전용으로 사용됩니다 실제 저장을위한 것이 아닙니다. 따라서 숫자를 제한 할 수는 있습니다.

그러나 모든 클라이언트 응용 프로그램이 이러한 제한 사항을 알고 있는지 확인하기 위해 .proto 또는 .options 파일에 이러한 최대 값을 정의하고 싶습니다.

이 방법이 있습니까?

필드 옵션이 있다는 것을 알고 있지만 열거 된 것은 here에 대한 옵션이 없습니다. 커스텀 옵션을 만드는 것은 가능하지만 컴파일러 확장을 작성해야하는 것 같습니다. 컴파일 할 모든 언어에 대해이 제한 검사를 수동으로 구현해야한다는 것입니다.

답변

1

아니요 의도를 표현하는 구문이없고 추가 할 규칙을 적용 할 inbuilt tool/codegen이 없습니다. 이것을 수동으로 처리해야합니다.

2

일부 타사 구현에는 이러한 지원이 포함됩니다.

예를 들어, 내 자신의 nanopb는 int_size option 있습니다

int_size : 필드의 정수 유형을 무시. 예 : uint8_t를 사용하여 RAM을 절약합니다.

값이 필드에 맞지 않으면 실행시 오류가 pb_decode()에서 반환됩니다.

+0

아는 것이 매우 유용합니다. 저는 실제로 arduino에서 nanopb를 사용하고 있습니다! 유감스럽게도 이것은 arduino와 직접 통신하지 않는 응용 프로그램간에 메시지가 전송되기 때문에 완벽하지는 않으므로 이러한 제한에 대해 알지 못합니다. – iFreilicht