最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python內(nèi)建模塊struct實例詳解

 更新時間:2018年02月02日 16:46:30   作者:錦小年  
這篇文章主要介紹了Python內(nèi)建模塊struct實例詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是Python內(nèi)建模塊struct的相關(guān)內(nèi)容,具體如下。

Python中變量的類型只有列表、元祖、字典、集合等高級抽象類型,并沒有像c中定義了位、字節(jié)、整型等底層初級類型。因為Python本來就是高級解釋性語言,運行的時候都是經(jīng)過翻譯后再在底層運行。如何打通Python和其他語言之間的類型定義障礙,Python的內(nèi)建模塊struct完全解決了所有問題。

知識介紹:

在struct模塊中最最常用的三個:

(1)struct.pack:用于將Python的值根據(jù)格式符,轉(zhuǎn)換為字符串(因為Python中沒有字節(jié)(Byte)類型,可以把這里的字符串理解為字節(jié)流,或字節(jié)數(shù)組)。
(2)struct.unpack: 剛好與struct.pack相反,用于將字節(jié)流轉(zhuǎn)換成python數(shù)據(jù)類型,該函數(shù)返回一個元組。
(3)struct.calcsize: 計算格式字符串所對應(yīng)的結(jié)果的長度。

轉(zhuǎn)換過程中遇到的格式操作:

格式符 C語言類型 Python類型
x pad byte no value
c char string of length 1
b signed char integer
B unsigned char integer
? _Bool bool
h short integer
H unsigned short integer
i int integer
I unsigned int integer or long
l long integer
L unsigned long long
q long long long
Q unsigned long long long
f float float
d double float
s char[] string
p char[] string
P void * long

實例詳解:

#!/usr/bin/python
# -*- coding:utf-8 -*-
'''測試struct模塊'''
from struct import *
import array

def fun_calcsize():
  print 'ci:',calcsize('ci')#計算格式占內(nèi)存大小
  print '@ci:',calcsize('@ci')
  print '=ci:',calcsize('=ci')
  print '>ci:',calcsize('>ci')
  print '<ci:',calcsize('<ci')
  print 'ic:',calcsize('ic')#計算格式占內(nèi)存大小
  print '@ic:',calcsize('@ic')
  print '=ic:',calcsize('=ic')
  print '>ic:',calcsize('>ic')
  print '<ic:',calcsize('<ic')

def fun_pack(Format,msg = [0x11223344,0x55667788]):
  result = pack(Format,*msg)
  print 'pack'.ljust(10),str(type(result)).ljust(20),
  for i in result:
    print hex(ord(i)), # ord把ASCII碼表中的字符轉(zhuǎn)換成對應(yīng)的整形,hex將數(shù)值轉(zhuǎn)化為十六進(jìn)制
  print

  result = unpack(Format,result)
  print 'unpack'.ljust(10),str(type(result)).ljust(20),
  for i in result:
    print hex(i),
  print 

def fun_pack_into(Format,msg = [0x11223344,0x55667788]):
  r = array.array('c',' '*8)#大小為8的可變緩沖區(qū),writable buffer
  result = pack_into(Format,r,0,*msg)
  print 'pack_into'.ljust(10),str(type(result)).ljust(20),
  for i in r.tostring():
    print hex(ord(i)),
  print

  result = unpack_from(Format,r,0)
  print 'pack_from'.ljust(10),str(type(result)).ljust(20),
  for i in result:
    print hex(i),
  print

def IsBig_Endian():
  '''判斷本機(jī)為大/小端'''
  a = 0x12345678
  result = pack('i',a)#此時result就是一個string字符串,字符串按字節(jié)同a的二進(jìn)制存儲內(nèi)容相同。
  if hex(ord(result[0])) == '0x78':
    print '本機(jī)為小端'
  else:
    print '本機(jī)為大端'

def test():
  a = '1234'
  for i in a:
    print '字符%s的二進(jìn)制:'%i,hex(ord(i))#字符對應(yīng)ascii碼表中對應(yīng)整數(shù)的十六進(jìn)制

  '''
  不用unpack()返回的數(shù)據(jù)也是可以使用pack()函數(shù)的,只要解包的字符串符合解包格式即可,
  pack()會按照解包格式將字符串在內(nèi)存中的二進(jìn)制重新解釋(說的感覺不太好...,見下例)
  '''
  print '大端:',hex(unpack('>i',a)[0])#因為pack返回的是元組,即使只有一個元素也是元組的形式
  print '小端:',hex(unpack('<i',a)[0])


if __name__ == "__main__":
  print '判斷本機(jī)是否為大小端?',
  IsBig_Endian()

  fun_calcsize()

  print '大端:'
  Format = ">ii"
  fun_pack(Format)
  fun_pack_into(Format)

  print '小端:'
  Format = "<ii"
  fun_pack(Format)
  fun_pack_into(Format)

  print 'test'
  test()
  '''
  result:
  判斷本機(jī)是否為大小端? 本機(jī)為小端
  ci: 8
  @ci: 8
  =ci: 5
  >ci: 5
  <ci: 5
  ic: 5
  @ic: 5
  =ic: 5
  >ic: 5
  <ic: 5
  大端:
  pack    <type 'str'>     0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
  unpack   <type 'tuple'>    0x11223344 0x55667788
  pack_into <type 'NoneType'>  0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
  pack_from <type 'tuple'>    0x11223344 0x55667788
  小端:
  pack    <type 'str'>     0x44 0x33 0x22 0x11 0x88 0x77 0x66 0x55
  unpack   <type 'tuple'>    0x11223344 0x55667788
  pack_into <type 'NoneType'>  0x44 0x33 0x22 0x11 0x88 0x77 0x66 0x55
  pack_from <type 'tuple'>    0x11223344 0x55667788
  test
  字符1的二進(jìn)制: 0x31
  字符2的二進(jìn)制: 0x32
  字符3的二進(jìn)制: 0x33
  字符4的二進(jìn)制: 0x34
  大端:0x31323334
  小端:0x34333231
  '''

本實例所用Python軟件環(huán)境:win10+anaconda3+pycharm,Python版本:3.6

總結(jié)

以上就是本文關(guān)于Python內(nèi)建模塊struct實例詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Python Xml文件添加字節(jié)屬性的方法

    Python Xml文件添加字節(jié)屬性的方法

    下面小編就為大家分享一篇Python Xml文件添加字節(jié)屬性的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Python映射類型之dict詳解

    Python映射類型之dict詳解

    這篇文章主要為大家詳細(xì)介紹了Python映射類型之dict,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 關(guān)于python pycharm中輸出的內(nèi)容不全的解決辦法

    關(guān)于python pycharm中輸出的內(nèi)容不全的解決辦法

    這篇文章主要介紹了關(guān)于python pycharm中輸出的內(nèi)容不全的解決辦法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 基于Python實現(xiàn)一個文件夾整理工具

    基于Python實現(xiàn)一個文件夾整理工具

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實現(xiàn)一個簡單的文件夾整理工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Python實現(xiàn)冒泡,插入,選擇排序簡單實例

    Python實現(xiàn)冒泡,插入,選擇排序簡單實例

    這篇文章主要介紹了Python實現(xiàn)冒泡,插入,選擇排序簡單實例,很適合Python初學(xué)者學(xué)習(xí)參考之用,需要的朋友可以參考下
    2014-08-08
  • python二叉樹的實現(xiàn)實例

    python二叉樹的實現(xiàn)實例

    這篇文章主要介紹了python二叉樹的實現(xiàn)實例,大家參考使用吧
    2013-11-11
  • 如何基于Python + requests實現(xiàn)發(fā)送HTTP請求

    如何基于Python + requests實現(xiàn)發(fā)送HTTP請求

    這篇文章主要介紹了如何基于Python + requests實現(xiàn)發(fā)送HTTP請求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • 在Python中調(diào)用ggplot的三種方法

    在Python中調(diào)用ggplot的三種方法

    這篇文章主要介紹了在Python中調(diào)用ggplot的三種方法,ggplot作為一個圖形庫,經(jīng)常被用來制作數(shù)據(jù)的可視化視圖,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)自動化Word排版

    Python實現(xiàn)自動化Word排版

    Word是一款廣泛使用的文檔編輯工具,但在排版過程中可能會遇到繁瑣的重復(fù)操作,下面我們就來學(xué)習(xí)一下如何使用Python實現(xiàn)自動化的Word排版,讓文檔編輯變得更加高效便捷吧
    2025-04-04
  • pygame庫實現(xiàn)移動底座彈球小游戲

    pygame庫實現(xiàn)移動底座彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了pygame庫實現(xiàn)移動底座彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論

琼结县| 玉田县| 鸡西市| 城固县| 临沧市| 乐安县| 襄樊市| 临桂县| 镇坪县| 佛学| 应城市| 鹿泉市| 雅江县| 麻阳| 绥滨县| 蓝田县| 凯里市| 白朗县| 余庆县| 巴楚县| 广宗县| 务川| 徐州市| 延庆县| 马山县| 德江县| 铜陵市| 视频| 丹棱县| 瓦房店市| 阿荣旗| 三明市| 德令哈市| 平利县| 张家界市| 南京市| 凤冈县| 丹江口市| 开原市| 临泉县| 天镇县|