<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 問題 你有一個字節字符串并想將它解壓成一個整數。或者,你需要將一個大整數轉換為一個字節字符串。 ## 解決方案 假設你的程序需要處理一個擁有128位長的16個元素的字節字符串。比如: ~~~ python data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004' ~~~ 為了將bytes解析為整數,使用 `int.from_bytes()` 方法,并像下面這樣指定字節順序: ~~~ python >>> len(data) 16 >>> int.from_bytes(data, 'little') 69120565665751139577663547927094891008 >>> int.from_bytes(data, 'big') 94522842520747284487117727783387188 >>> ~~~ 為了將一個大整數轉換為一個字節字符串,使用 `int.to_bytes()` 方法,并像下面這樣指定字節數和字節順序: ~~~ >>> x = 94522842520747284487117727783387188 >>> x.to_bytes(16, 'big') b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004' >>> x.to_bytes(16, 'little') b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00' >>> ~~~ ## 討論 大整數和字節字符串之間的轉換操作并不常見。 然而,在一些應用領域有時候也會出現,比如密碼學或者網絡。 例如,IPv6網絡地址使用一個128位的整數表示。 如果你要從一個數據記錄中提取這樣的值的時候,你就會面對這樣的問題。 作為一種替代方案,你可能想使用6.11小節中所介紹的 struct 模塊來解壓字節。 這樣也行得通,不過利用 struct 模塊來解壓對于整數的大小是有限制的。 因此,你可能想解壓多個字節串并將結果合并為最終的結果,就像下面這樣: ~~~ python >>> data b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004' >>> import struct >>> hi, lo = struct.unpack('>QQ', data) >>> (hi << 64) + lo 94522842520747284487117727783387188 >>> ~~~ 字節順序規則(little或big)僅僅指定了構建整數時的字節的低位高位排列方式。 我們從下面精心構造的16進制數的表示中可以很容易的看出來: ~~~ python >>> x = 0x01020304 >>> x.to_bytes(4, 'big') b'\x01\x02\x03\x04' >>> x.to_bytes(4, 'little') b'\x04\x03\x02\x01' >>> ~~~ 如果你試著將一個整數打包為字節字符串,那么它就不合適了,你會得到一個錯誤。 如果需要的話,你可以使用 `int.bit_length()` 方法來決定需要多少字節位來存儲這個值。 ~~~ python >>> x = 523 ** 23 >>> x 335381300113661875107536852714019056160355655333978849017944067 >>> x.to_bytes(16, 'little') Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: int too big to convert >>> x.bit_length() 208 >>> nbytes, rem = divmod(x.bit_length(), 8) >>> if rem: ... nbytes += 1 ... >>> >>> x.to_bytes(nbytes, 'little') b'\x03X\xf1\x82iT\x96\xac\xc7c\x16\xf3\xb9\xcf...\xd0' >>> ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看