参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017685387246080

  在使用Python 实现字符向字节数据类型转换的时候,Python没有提供专门处理字节的数据类型,不过Python提供了一个Struct模块提供bytes和其他二进制数据类型的转换

  pack(),将任意数据类型转变为bytes数据类型

>>> import struct
>>> struct.pack('>I', 10240099)
b'\x00\x9c@c'

  pack的第一个参数是处理指令,'>I'的意思是:

  >表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。

  后面的参数个数要和处理指令一致。如果不一致会报错

>>> struct.pack('I','2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: required argument is not an integer
>>>

  unpackbytes变成相应的数据类型:

>>> struct.unpack('>IH', b'\xf0\xf0\xf0\xf0\x80\x80')
(4042322160, 32896)

  H代表两个字节的无符号整数,

  c代表一个字节的字符

  

  所以,尽管Python不适合编写底层操作字节流的代码,但在对性能要求不高的地方,利用struct就方便多了

  struct模块定义的数据类型可以参考Python官方文档:https://docs.python.org/3/library/struct.html#format-characters

小端存储

  参考链接:https://blog.csdn.net/favory/article/details/4441361

  与数据在存储器中的存放地址有关

  小端存储:较低的有效字节存放在较低的存储器地址,较高的有效字节存放在较高的存储器地址

  大端存储:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址

  为什么会有较高的有效字节,和较低的有效字节的区分呢?

  这是因为目前的计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit,而C语言中除了有8bit的char外,还有16bit的short类型,还用32bit的long类型(不同的编译器还不一样),那么加入我们存放一个长度32bit的整数:

  (由于一个地址单元是8bit,需要将这个长度为32bit的数据存放在4个地址单元中)

  

  另外,对于16位或者32位的这些寄存器长度大于8位的处理器,由于寄存器的宽度大于一个内存地址,也面临这一个如何将多个字节安排的问题。

  

  

Python struct与小端存储的更多相关文章

  1. C语言--测试电脑存储模式(大端存储OR小端存储)

    相信大家都知道大端存储和小端存储的概念,这在平时,我们一般不用考虑,但是,在某些场合,这些概念就显得很重要,比如,在 Socket 通信时,我们的电脑是小端存储模式,可是传送数据或者消息给对方电脑时, ...

  2. C语言判断系统数据大/小端存储方式

    小端存储:数据的低位部分,存储于存储器的低地址空间里. 大端存储:数据的低位部分,存储于存储器的高地址空间里. 首先,一般PC数据存储方式是小端存储. 基本实现思想是:将存储器中所存的数据按字节以地址 ...

  3. 小端存储(little Endian)大端存储(big Endian)

    小端存储--低内存低字节 87654321 字节或半字节的最低位字节(Lowest Significant Bit,LSB)存放于内存最低位字节地址上.即最低地址存放的最低字节,为Power PC,I ...

  4. C++将整型数据转换成大端或小端存储顺序

    大端和小端的概念参考之前博客: 大端/小端,高字节/低字节,高地址/低地址,移位运算 昨晚帮导师从指令中恢复图像的时候,导师要我转换成raw格式,也就是记录图像像素的二进制序列,然后反复强调让我注意大 ...

  5. 汉的Unicode编码是6C49,而且通常都是小端存储。汉字的unicode范围是:0x4E00~0x9FA5,即CJK一共20928个字符。GBK有21886个汉字,所以多了958个汉字

    小端存储的结果是 49 6C UTF-8有点类似于Haffman编码,它将Unicode编码为:0x00-0x7F的字符,用单个字节来表示:0x80-0x7FF的字符用两个字节表示:0x800-0xF ...

  6. 小端存储转大端存储 & 大端存储转小端存储

    1.socket编程常用的相关函数:htons.htonl.ntohs.ntohl h:host   n:network      s:string    l:long 2.基本数据类型,2字节,4字 ...

  7. C++判断计算式是大端存储模式,还是小端存储模式

    小端存储:数据的低字节存储在地址空间的低字节位,数据的高字节存储在地址空间的高字节位. 大端存储:数据的低字节存储在地址空间的高字节位,数据的高字节存储在地址空间的低字节位. 判断计算机是小端还是大端 ...

  8. Windows 小端存储

    小端->高高低低(高位存在高地址,低位存在低地址)

  9. 推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式

    第一个版本号: //return true in big-endian machines bool check_big_endian1() { int a = 0; int *p = &a; ...

随机推荐

  1. Java入门——初识Java

    Java入门——初识Java 摘要:本文主要对Java这门编程语言进行简单的介绍. Java简介 说明 Java语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...

  2. SSM框架之Mybatis(2)CRUD操作

    Mybatis(2)CRUD 1.基于代理Dao实现CRUD操作 使用要求: 1.持久层接口(src\main\java\dao\IUserDao.java)和持久层接口的映射配置(src\main\ ...

  3. 使用android日志工具

    Log的级别? 日志级别按照高低排序为:ERROR,WARN,INFO,DEBUG,VERBOSE, 日志输出: Log.e()输出ERROR级别的日志信息 Log.w()输出WARN,ERROR级别 ...

  4. Gatech OMSCS的申请和学习之奥妙

    https://zhuanlan.zhihu.com/p/54680585 我写东西一向希望能给大家带来正能量,提供有价值的信息,不辱没母校的厚德价值观. 我是传统没落工科毕业后开发软件,但是一直没下 ...

  5. linux软件管理-RPM

    目录 linux软件管理-RPM RPM的基础概述 RPM包安装管理 linux软件管理-RPM RPM的基础概述 rpm:RPM全称RPM Package Manager缩写,由红帽开发用于软件包的 ...

  6. RAID 独立磁盘冗余阵列 - redundant array of independent disks

    RAID:  RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高. RAID ...

  7. js修改对象的key值

    var array = [ { id:1, name:"小明" }, { id:2, name:"小红" } ]; /**/ //旧key到新key的映射 va ...

  8. 2. java 运算符

    运算符 一.算术运算符 1. 四则与取模 + - * / % ++ -- (1) 单独使用++/--,前++和后++没有任何区别. (2) 混合使用,有区别 ①如果是前++,那么变量立刻马上 +1,然 ...

  9. word保存为pdf

    word保存为pdf word保存为pdf word保存为pdf

  10. 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三  Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...