2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
這里有兩個(gè)問題
1) protobuf 對(duì)整數(shù)使用 varint 編碼,因此大小取決于值,
2) 零值字段默認(rèn)是不發(fā)送的,所以因?yàn)閮蓚€(gè)整數(shù)都是零,所以連它們的字段標(biāo)識(shí)都不發(fā)送。
如果將它們都設(shè)置為 1,則字節(jié)數(shù)將多于零,但長(zhǎng)度仍不固定,具體取決于值的范圍
因此,通常沒有真正的方法在 protobuf 消息中強(qiáng)制執(zhí)行固定大小
如果你想要固定長(zhǎng)度的消息,你可能最好使用直接的在線結(jié)構(gòu)類型編碼,但是這對(duì)于語言互操作來說更難,因?yàn)樗鼈兌急仨毝x相同的消息并且你會(huì)失去簡(jiǎn)單的消息遷移以及 protobuf 提供的所有很酷的東西。
Cap'n Proto可能有固定大小結(jié)構(gòu)的選項(xiàng),但它們通常也會(huì)壓縮,這將再次產(chǎn)生可變長(zhǎng)度的消息。
如果您描述了您試圖最終解決的問題,我們可能會(huì)建議其他替代方案。

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
您正在調(diào)用len()
一個(gè)字節(jié)數(shù)組。它將計(jì)算該數(shù)組中元素的數(shù)量,并返回它。
如果您剛剛實(shí)例化了一個(gè)新的、空的、內(nèi)部沒有任何內(nèi)容的 protobuf 指針對(duì)象,那么封送處理的字節(jié)數(shù)組將不會(huì)保存任何數(shù)據(jù)——這就是為什么您得到0
.
我很不確定你想讓它返回什么。你能用你想要的輸出來澄清你的問題嗎?我也許可以更好地回答你的問題。
- 2 回答
- 0 關(guān)注
- 149 瀏覽
添加回答
舉報(bào)