• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            MyMSDN

            MyMSDN記錄開發(fā)新知道

            關(guān)于protobuf中的field_number范圍的解釋

            以下是來自Google Protobuf Documents里的一句話:
            As you can see, each field in the message definition has a unique numbered tag. These tags are used to identify your fields in the message binary format, and should not be changed once your message type is in use. Note that tags with values in the range 1 through 15 take one byte to encode. Tags in the range 16 through 2047 take two bytes. So you should reserve the tags 1 through 15 for very frequently occurring message elements. Remember to leave some room for frequently occurring elements that might be added in the future.
            這里要做一個(gè)解釋,就是為什么是1到15,以及16到2047呢?
            1. 1到15,僅使用1bytes。每個(gè)byte包含兩個(gè)部分,一個(gè)是field_number一個(gè)是tag,其中field-number就是protobuf中每個(gè)值后等號(hào)后的數(shù)字(在C++和Java中,如果不設(shè)置這個(gè)值,則它是隨機(jī)的,如果在Python中,不設(shè)置,它則不被處理(這個(gè)在message binary format中的Field Order一節(jié)中有提到)。那么我們可以認(rèn)為這個(gè)field_number是必須的。那么一個(gè)byte用來表達(dá)這個(gè)值就是000000000,其中紅色表示是否有后續(xù)字節(jié),如果為0表示沒有也就是這是一個(gè)字節(jié),藍(lán)色部分表示field-number,綠色部分則是wire_type部分,表示數(shù)據(jù)類型。也就是(field_number << 3) | wire_type。其中wire_type只有3位,表示數(shù)據(jù)類型。那么能夠表示field_number的就是5位藍(lán)色的數(shù)字,5位數(shù)字能夠表達(dá)的最大范圍就是1-15(其中0是無效的)。
            2. 16到2047,與上面的規(guī)則其實(shí)類似,下面以2bytes為例子,那么就有10000000 00000000,其中紅色部分依然是符號(hào)位,因?yàn)槊總€(gè)byte的第一位都用來表示下一byte是否和自己有關(guān),那么對(duì)于>1byte的數(shù)據(jù),第一位一定是1,因?yàn)檫@里假設(shè)是2byte,那么第二個(gè)byte的第一位也是紅色,刨除這兩位,再扣掉3個(gè)wire_type位,剩下11位(2*8-2-3),能夠表達(dá)的數(shù)字范圍就是2047(211)。
            參考資料:
            1. http://code.google.com/intl/zh-CN/apis/protocolbuffers/docs/proto.html
            2. http://code.google.com/apis/protocolbuffers/docs/encoding.html

            posted on 2011-03-19 02:01 volnet 閱讀(5277) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

            特殊功能
             
            成人久久精品一区二区三区| 久久亚洲国产最新网站| 69SEX久久精品国产麻豆| 久久精品中文字幕久久| 国产亚洲美女精品久久久| 亚洲伊人久久综合影院| 91性高湖久久久久| 久久狠狠高潮亚洲精品| 色综合久久久久综合99| 国产精品久久影院| 大香伊人久久精品一区二区| 青青国产成人久久91网| 久久久国产乱子伦精品作者| 欧美午夜精品久久久久久浪潮| 国产精品久久久久国产A级| 久久精品久久久久观看99水蜜桃| 一本久久a久久精品综合夜夜| 婷婷伊人久久大香线蕉AV| 亚州日韩精品专区久久久| 久久国产视屏| 一级做a爰片久久毛片16| 国产美女久久精品香蕉69| 久久精品国产亚洲AV久| 色综合久久中文字幕综合网| 91精品国产综合久久香蕉| 99国产欧美久久久精品蜜芽| 亚洲精品国精品久久99热一| 久久精品免费一区二区| 久久精品一区二区三区AV| 亚洲а∨天堂久久精品| 午夜视频久久久久一区| 久久天天躁狠狠躁夜夜av浪潮| 久久精品国产亚洲一区二区三区 | 国产精品免费久久久久影院| 人妻少妇久久中文字幕一区二区 | 久久亚洲欧洲国产综合| 成人午夜精品久久久久久久小说 | 26uuu久久五月天| 国产亚州精品女人久久久久久| 国产成人精品久久亚洲高清不卡 | 99久久国产综合精品成人影院|