2013-07-22 17 views
10

Tôi không thể tìm thấy nếu có thể có loại char/byte trong proto.Có loại một byte trong protobuf không?

tôi có thể xem các loại khác nhau ở đây:

nhưng tôi không thể tìm thấy loại byte và các loại thậm chí int16 ở đó.

+6

Các loại số nguyên không cố định sử dụng mã hóa độ dài biến đổi, do đó bạn có thể sử dụng 'int32' cho số nguyên 16 bit và 8 bit và để phần biến đổi mã hóa không quan tâm đến việc không gửi byte mà bạn không sử dụng . –

+0

@muistooshort IMHO nhận xét của bạn phải được chấp nhận trả lời. – omikron

Trả lời

18

Không, không có loại 1 byte cố định. Độ dài cố định chỉ có 4 và 8 biến thể byte. Hầu hết các giá trị số khác được mã hóa dưới dạng "varint" s, có độ dài thay đổi tùy thuộc vào độ lớn (và ký hiệu, nhưng "ngoằn ngoèo" xuất hiện ở đó). Vì vậy, bạn có thể lưu trữ byte với giá trị 0-127 trong một byte và 128-255 trong hai byte. Giá trị 16 bit sẽ mất từ ​​1 đến 3 byte tùy thuộc vào độ lớn (và dấu/zigzag, v.v.).

Đối với bội số, có "byte" cho phiên bản 8 bit và "được đóng gói" cho phần còn lại; điều này tránh chi phí của một tiêu đề trường cho mỗi giá trị.

Các vấn đề liên quan