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

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

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

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

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

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

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> struct.pack('I','2')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
struct.error: required argument is not an integer
>>>

unpack把bytes变成相应的数据类型:

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

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

c代表一个字节的字符

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

小端存储

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

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

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

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

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

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

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

Python struct与小端存储相关推荐

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

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

  2. 大端小端存储方式详解

    大端方式:用存储器的低字节地址单元来存放数据的最高字节 小端存放:用存储器的低字节地址单元来存放数据的最低字节 注: 在存储器中,左边的字节地址单元低于右边的字节地址单元,字节地址单元一般由八位二进制 ...

  3. c语言 int大端转小端,C++将整型数据转换成大端或小端存储顺序

    昨晚帮导师从指令中恢复图像的时候,导师要我转换成raw格式,也就是记录图像像素的二进制序列,然后反复强调让我注意大端小端.当时我也没在意,用ofstream的write方法一个个地写进去,发现有部分数 ...

  4. C语言中低位存放,C语言 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() { int i = 1; return 0; } 数据在内存中的存放方式 ...

  5. C语言程序设计 | 大端小端存储解析以及判断方法

    当我们在C语言中查看数据在内存中的存储时,我们经常会发现一个很奇怪的现象,什么现象呢? 例如下面这段代码 int main() {int i = 1;return 0; } 数据在内存中的存放方式似乎 ...

  6. 大端和小端存储模式解析

    一.大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的<格利佛游记>:Lilliput和Blefuscu这两个强国在过去的36个月中一 ...

  7. ARM9的存储结构~~大端存储和小端存储

    众所周知ARM9的每个地址对应的是一个存储字节而不是一个存储字,但ARM9可以访问存储字,访问存储字时,其地址应该是字对准,即字地址可以被四整除,也就是说,若第1个字在存储空间中是第0个地址对应单元( ...

  8. 数据的存储,大端存储和小端小端存储

    在数据的存储中,有两种存储形式,大端存储和小端存储. 所有的数据都是在内存当中存的,而内存当中的基本单位是字节. 数据访存的基本单位是字节的话,那么一个整形变量(int)就有四个字节,那么就意味着数据 ...

  9. 大端小端存储模式详解及判断方法

    文章目录 大小端模式的概念 两种模式出现原因 两种模式的优劣 大小端的应用情景 判断机器的字节序 大小端模式的概念 当我们查看数据在内存中的存储情况时,我们经常会发现一个很奇怪的现象,什么现象呢? i ...

最新文章

  1. 设计模式 装饰者模式 带你重回传奇世界
  2. PyTorch | torch.full()使用方法 | torch.full()如何使用? torch.full()例子说明 | 通过torch.full创建全相同的张量
  3. python 制作自己的新闻_用Python制作一个每日新闻热点爬虫脚本
  4. python 数据库中文乱码 Excel
  5. LeetCode(1108)——IP 地址无效化(JavaScript)
  6. 7.07 生成累积乘积
  7. MYSQL去重方法汇总
  8. 软件工程复习之rup
  9. 冷山的博客思听书摘索引页
  10. 关于Node.js中内存管理的思考与实践
  11. 同一个人两次被雷电击中,张益唐攻克世纪难题朗道-西格尔零点猜想?
  12. 刘小乐教授:我与生物信息学的不解之缘
  13. 个人项目-仿微信小打卡小程序
  14. 系统扫描修复cmd命令
  15. String字符串截取几种方法
  16. 双 JK 触发器 74LS112 逻辑功能。真值表_数电实验 | 时序逻辑电路
  17. impala java 堆内存配置_【原创】大叔问题定位分享(38)impala报错内存不足
  18. 手写call,apply,bind函数
  19. CPU四芯转接头不良引起的无法开机故障
  20. 字符串常量池,看这篇就够了(二)

热门文章

  1. iOS开发 Xcode8中遇到的问题及改动
  2. windows下设置socket的connect超时
  3. 【hta版】获取AppStore上架后的应用版本号
  4. s5pv210 uboot-2012-10移植(七) 之支持SD卡
  5. 场效应晶体管内存 到底是谁发明的?
  6. 微软Silverlight 3正式版已经出炉
  7. vconsole插件_移动端调试面板插件vconsole
  8. php两个数组去掉相同的,php如何删除两个数组中相同的数据
  9. 【转】对服务采购订单的条目确认
  10. SAP中VLPOD什么意思