日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)Python教程:xdrlib —- 編碼與解碼 XDR 數(shù)據(jù)

xdrlib —- 編碼與解碼 XDR 數(shù)據(jù)

源代碼: Lib/xdrlib.py

從版本 3.11 開(kāi)始標(biāo)記為過(guò)時(shí),將在版本 3.13 中移除。: xdrlib 模塊已被棄用(請(qǐng)參閱 PEP 594 了解詳情)。


xdrlib 模塊為外部數(shù)據(jù)表示標(biāo)準(zhǔn)提供支持,該標(biāo)準(zhǔn)的描述見(jiàn) RFC 1014,由 Sun Microsystems, Inc. 在 1987 年 6 月撰寫(xiě)。 它支持該 RFC 中描述的大部分?jǐn)?shù)據(jù)類型。

xdrlib 模塊定義了兩個(gè)類,一個(gè)用于將變量打包為 XDR 表示形式,另一個(gè)用于從 XDR 表示形式解包。 此外還有兩個(gè)異常類。

class xdrlib.Packer

Packer 是用于將數(shù)據(jù)打包為 XDR 表示形式的類。 Packer 類的實(shí)例化不附帶參數(shù)。

class xdrlib.Unpacker(data)

Unpacker 是用于相應(yīng)地從字符串緩沖區(qū)解包 XDR 數(shù)據(jù)值的類。 輸入緩沖區(qū)將作為 data 給出。

參見(jiàn)

RFC 1014 - XDR: 外部數(shù)據(jù)表示標(biāo)準(zhǔn)

這個(gè) RFC 定義了最初編寫(xiě)此模塊時(shí) XDR 所用的數(shù)據(jù)編碼格式。 顯然它已被 RFC 1832 所淘汰。

RFC 1832 - XDR: 外部數(shù)據(jù)表示標(biāo)準(zhǔn)

更新的 RFC,它提供了經(jīng)修訂的 XDR 定義。

Packer 對(duì)象

Packer 實(shí)例具有下列方法:

Packer.get_buffer()

將當(dāng)前打包緩沖區(qū)以字符串的形式返回。

Packer.reset()

將打包緩沖區(qū)重置為空字符串。

總體來(lái)說(shuō),你可以通過(guò)調(diào)用適當(dāng)?shù)?pack_type() 方法來(lái)打包任何最常見(jiàn)的 XDR 數(shù)據(jù)類型。 每個(gè)方法都是接受單個(gè)參數(shù),即要打包的值。 受支持的簡(jiǎn)單數(shù)據(jù)類型打包方法如下: pack_uint(), pack_int(), pack_enum(), pack_bool(), pack_uhyper() 以及 pack_hyper()

Packer.pack_float(value)

打包單精度浮點(diǎn)數(shù) value。

Packer.pack_double(value)

打包雙精度浮點(diǎn)數(shù) value。

以下方法支持打包字符串、字節(jié)串以及不透明數(shù)據(jù)。

Packer.pack_fstring(n, s)

打包固定長(zhǎng)度字符串 sn 為字符串的長(zhǎng)度,但它 不會(huì) 被打包進(jìn)數(shù)據(jù)緩沖區(qū)。 如有必要字符串會(huì)以空字節(jié)串填充以保證 4 字節(jié)對(duì)齊。

Packer.pack_fopaque(n, data)

打包固定長(zhǎng)度不透明數(shù)據(jù)流,類似于 pack_fstring()。

Packer.pack_string(s)

打包可變長(zhǎng)度字符串 s。 先將字符串的長(zhǎng)度打包為無(wú)符號(hào)整數(shù),再用 pack_fstring() 來(lái)打包字符串?dāng)?shù)據(jù)。

Packer.pack_opaque(data)

打包可變長(zhǎng)度不透明數(shù)據(jù)流,類似于 pack_string()。

Packer.pack_bytes(bytes)

打包可變長(zhǎng)度字節(jié)流,類似于 pack_string()。

下列方法支持打包數(shù)組和列表:

Packer.pack_list(list, pack_item)

打包由同質(zhì)條目構(gòu)成的 list。 此方法適用于不確定長(zhǎng)度的列表;即其長(zhǎng)度無(wú)法在遍歷整個(gè)列表之前獲知。 對(duì)于列表中的每個(gè)條目,先打包一個(gè)無(wú)符號(hào)整數(shù) 1,再添加列表中數(shù)據(jù)的值。 pack_item 是在打包單個(gè)條目時(shí)要調(diào)用的函數(shù)。 在列表的末尾,會(huì)再打包一個(gè)無(wú)符號(hào)整數(shù) 0。

例如,要打包一個(gè)整數(shù)列表,代碼看起來(lái)會(huì)是這樣:

 
 
 
 
  1. import xdrlib
  2. p = xdrlib.Packer()
  3. p.pack_list([1, 2, 3], p.pack_int)

Packer.pack_farray(n, array, pack_item)

打包由同質(zhì)條目構(gòu)成的固定長(zhǎng)度列表 (array)。 n 為列表長(zhǎng)度;它 不會(huì) 被打包到緩沖區(qū),但是如果 len(array) 不等于 n 則會(huì)引發(fā) ValueError。 如上所述,pack_item 是在打包每個(gè)元素時(shí)要使用的函數(shù)。

Packer.pack_array(list, pack_item)

打包由同質(zhì)條目構(gòu)成的可變長(zhǎng)度 list。 先將列表的長(zhǎng)度打包為無(wú)符號(hào)整數(shù),再像上面的 pack_farray() 一樣打包每個(gè)元素。

Unpacker 對(duì)象

Unpacker 類提供以下方法:

Unpacker.reset(data)

使用給定的 data 重置字符串緩沖區(qū)。

Unpacker.get_position()

返回?cái)?shù)據(jù)緩沖區(qū)中的當(dāng)前解包位置。

Unpacker.set_position(position)

將數(shù)據(jù)緩沖區(qū)的解包位置設(shè)為 position。 你應(yīng)當(dāng)小心使用 get_position() 和 set_position()。

Unpacker.get_buffer()

將當(dāng)前解包數(shù)據(jù)緩沖區(qū)以字符串的形式返回。

Unpacker.done()

表明解包完成。 如果數(shù)據(jù)沒(méi)有全部完成解包則會(huì)引發(fā) Error 異常。

此外,每種可通過(guò) Packer 打包的數(shù)據(jù)類型都可通過(guò) Unpacker 來(lái)解包。 解包方法的形式為 unpack_type(),并且不接受任何參數(shù)。 該方法將返回解包后的對(duì)象。

Unpacker.unpack_float()

解包單精度浮點(diǎn)數(shù)。

Unpacker.unpack_double()

解包雙精度浮點(diǎn)數(shù),類似于 unpack_float()。

此外,以下方法可用來(lái)解包字符串、字節(jié)串以及不透明數(shù)據(jù):

Unpacker.unpack_fstring(n)

解包并返回固定長(zhǎng)度字符串。 n 為期望的字符數(shù)量。 會(huì)預(yù)設(shè)以空字節(jié)串填充以保證 4 字節(jié)對(duì)齊。

Unpacker.unpack_fopaque(n)

解包并返回固定長(zhǎng)度數(shù)據(jù)流,類似于 unpack_fstring()。

Unpacker.unpack_string()

解包并返回可變長(zhǎng)度字符串。 先將字符串的長(zhǎng)度解包為無(wú)符號(hào)整數(shù),再用 unpack_fstring() 來(lái)解包字符串?dāng)?shù)據(jù)。

Unpacker.unpack_opaque()

解包并返回可變長(zhǎng)度不透明數(shù)據(jù)流,類似于 unpack_string()。

Unpacker.unpack_bytes()

解包并返回可變長(zhǎng)度字節(jié)流,類似于 unpack_string()。

下列方法支持解包數(shù)組和列表:

Unpacker.unpack_list(unpack_item)

解包并返回同質(zhì)條目的列表。 該列表每次解包一個(gè)元素,先解包一個(gè)無(wú)符號(hào)整數(shù)旗標(biāo)。 如果旗標(biāo)為 1,則解包條目并將其添加到列表。 旗標(biāo)為 0 表明列表結(jié)束。 unpack_item 為在解包條目時(shí)調(diào)用的函數(shù)。

Unpacker.unpack_farray(n, unpack_item)

解包并(以列表形式)返回由同質(zhì)條目構(gòu)成的固定長(zhǎng)度數(shù)組。 n 為期望的緩沖區(qū)內(nèi)列表元素?cái)?shù)量。 如上所述,unpack_item 是解包每個(gè)元素時(shí)要使用的函數(shù)。

Unpacker.unpack_array(unpack_item)

解包并返回由同質(zhì)條目構(gòu)成的可變長(zhǎng)度 list。 先將列表的長(zhǎng)度解包為無(wú)符號(hào)整數(shù),再像上面的 unpack_farray() 一樣解包每個(gè)元素。

異常

此模塊中的異常會(huì)表示為類實(shí)例代碼:

exception xdrlib.Error

基本異常類。 Error 具有一個(gè)公共屬性 msg,其中包含對(duì)錯(cuò)誤的描述。

exception xdrlib.ConversionError

從 Error 所派生的類。 不包含額外的實(shí)例變量。

以下是一個(gè)應(yīng)該如何捕獲這些異常的示例:

 
 
 
 
  1. import xdrlib
  2. p = xdrlib.Packer()
  3. try:
  4. p.pack_double(8.01)
  5. except xdrlib.ConversionError as instance:
  6. print('packing the double failed:', instance.msg)

分享題目:創(chuàng)新互聯(lián)Python教程:xdrlib —- 編碼與解碼 XDR 數(shù)據(jù)
文章路徑:http://www.5511xx.com/article/coipiss.html