第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

golang protobuf 封送固定大小的空結(jié)構(gòu)

golang protobuf 封送固定大小的空結(jié)構(gòu)

Go
呼喚遠(yuǎn)方 2023-04-24 17:01:55
我有一個(gè) protobuf 結(jié)構(gòu)Data在.proto:message Data {    uint64 ID = 1;    uint32 GUID = 2;}在高朗b, err := proto.Marshal(&pb.Data{})if err != nil {    panic(err)}fmt.Println(len(b))我有0長(zhǎng)度!無論 pb.Data 是什么,我怎樣才能使 proto.Marshal 始終返回固定大小?附言。pb.Data 只包含int64和int32
查看完整描述

2 回答

?
Qyouu

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ì)建議其他替代方案。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
慕村9548890

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.

我很不確定你想讓它返回什么。你能用你想要的輸出來澄清你的問題嗎?我也許可以更好地回答你的問題。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)