Python模块struct(二进制数据服务)
struct模块
Python没有专门处理字节的数据类型。但由于b'str'
可以表示字节,所以,字节数组=二进制str。
而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。
在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes
,你得配合位运算符这么写:
>>> n = 10240099
>>> b1 = (n & 0xff000000) >> 24
>>> b2 = (n & 0xff0000) >> 16
>>> b3 = (n & 0xff00) >> 8
>>> b4 = n & 0xff
>>> bs = bytes([b1, b2, b3, b4])
>>> bs
b'\x00\x9c@c'
解释:
10240099是十进制数字,转化为2进制数字有24位(3个字节)。想把它用字节串表示,可以使用bytes()方法,但是bytes()指接收1个字节以内的十进制数字,即0~255。所以要把10240099分解为3部分,每部分一个字节,然后用bytes()求每个字节的字节串,最后再组装起来。很麻烦,具体见上面的代码。
说明:
b2 = (n & 0xff0000) >> 16 #位运算符号&,和右移运算符>>的作用:提取10240099的右边的8位字符。
10240099 & 0xff0000 ,位与,只有都是有1,才得1
1001 1100 0100 0000 0110 0011
1111 1111 0000 0000 0000 0000
----------------------------------------&
1001 1100 0000 0000 0000 0000
然后对得到的数右移>>16, 得到10011100。这就相当于从10240099中提取了从左边开始的8bit数字。
struct
解决bytes
和其他二进制数据类型的转换。
>>> import struct
>>> struct.pack('>I', 10240099)
b'\x00\x9c@c'
函数:
struct.
pack
(format, v1, v2, ...)
参数:
- format,格式的字符串表示。 '>'代表big-endian, 'I'代表4字节无符号整数。'H'代表2字节无符号整数。
struct.
unpack
(format, buffer)
unpack
把bytes
变成相应的数据类型:
>>> struct.unpack('>IH', b'\xf0\xf0\xf0\xf0\x80\x80')
(4042322160, 32896)
本文参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017685387246080
Python模块struct(二进制数据服务)的更多相关文章
- python模块介绍- SocketServer 网络服务框架
来源:https://my.oschina.net/u/1433482/blog/190612 摘要: SocketServer简化了网络服务器的编写.它有4个类:TCPServer,UDPServe ...
- python模块struct和subprocess
准确地讲,Python没有专门处理字节的数据类型.但由于str既是字符串,又可以表示字节,所以,字节数组=str.而在C语言中,我们可以很方便地用struct.union来处理字节,以及字节和int, ...
- 宜人贷PaaS数据服务平台Genie:技术架构及功能
上篇:架构及组件 一.数据平台的发展 1.1 背景介绍 随着数据时代的到来,数据量和数据复杂度的增加推动了数据工程领域的快速发展.为了满足各类数据获取/计算等需求,业内涌现出了诸多解决方案.但大部分方 ...
- Python使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...
- Python学习——struct模块的pack、unpack示例
he struct module includes functions for converting between strings of bytes and native Python data t ...
- python中struct模块及packet和unpacket
转自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组 ...
- day30 python学习 struct模块和 subprocess 模块
import subprocess import struct aa=input('>>') obj=subprocess.Popen(aa,shell=True,#aa代表的是读取字符串 ...
- Python使用struct处理二进制(pack和unpack用法)
转载自:http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html 这篇文章写的很好,所以无耻的转了.. 有的时候需要用python处理二进 ...
- python模块之struct
# #********struct模块********# # 1.按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时, # 不能传输int,此时先将int转化为字节流,然后再发 ...
随机推荐
- vue router 报错: Uncaught (in promise) NavigationDuplicated {_name:""NavigationDuplicated"... 的解决方法
参考资料:https://blog.csdn.net/zy21131437/article/details/99548983
- SSRF绕过姿势
0x00 什么是SSRF? SSRF(Server-Side Request Forgery,服务器端请求伪造):是一种由攻击者构造形成由服务器端发起请求的一个漏洞. SSRF 攻击的目标是从外网无法 ...
- centOS重启网络服务报错
1:启动网卡报错(Failed to start LSB: Bring up/down networking )解决办法总结 将 NetworkManager关闭, systemctl stop Ne ...
- A/B HDU-1576(简单的数论题)
Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). Input 数据的第一 ...
- crm--rbac权限组件使用步骤
本人的权限组件码云地址:https://gitee.com/shiguanggege/rbac 里面有文档详细介绍权限组件的使用步骤
- JWT的认识和session的区别
1.前后端分离框架中前端和后端域名不同,不能跨域请求,加上移动端无cookie,所以无法使用session.2.基于token的认证和传统的session认证的区别: 传统的session认证: 我们 ...
- Java 日志系统
Java 日志系统 1. 创建日志记录器 private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 2. 打印日 ...
- 在Windows平台上运行Tomcat
从之前的学习中知道,可以调用Bootstrap类将Toomcat作为一个独立的应用程序来运行,在Windows平台上,可以调用startup.bat批处理文件来启动Tomcat,或运行shutdown ...
- 大数据学习(3)- redis集群
安装方法摘自 http://www.redis.cn/topics/cluster-tutorial.html 这个方法为简单版的方法,在原文的基础上,我加了一点参数,其他参数配置可以请教其他大神 搭 ...
- C#文本_文件夹操作
1我们常用的File类 可以用来对文件的一些操作 下面看代码. using System;using System.Collections.Generic;using System.IO;using ...