python中怎么查看二进制转换的数据_python处理二进制数据

更新时间:2023-07-19 04:39:33 阅读: 评论:0

python中怎么查看⼆进制转换的数据_python处理⼆进制数据有的时候需要⽤python处理⼆进制数据,⽐如,存取⽂件,socket操作时.这时候,可以使⽤python的struct模块来完成.可以⽤struct来处理c语⾔中的结构体.
struct模块中最重要的三个函数是pack(), unpack(), calcsize()
pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)
unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple
calcsize(fmt) 计算给定的格式(fmt)占⽤多少字节的内存
struct中⽀持的格式如下表:
> 格式
c类型
python类型
> x
char
⽆(表⽰填充字节)
> c
char
长度为1的字符串
> b
signed char
integer
男人真的很累> B
unsigned char
integer积攒的近义词
> h
short
integer
> H
unsigned short
integer
> i
int
integer
> I
unsigned int
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*
integer
注1.q和Q只在机器⽀持64位操作时有意思
注2.每个格式前可以有⼀个数字,表⽰个数
注3.s格式表⽰⼀定长度的字符串,4s表⽰长度为4的字符串,但是p表⽰的是pascal字符串
注4.P⽤来转换⼀个指针,其长度和机器字长相关
默认情况下struct根据本地机器字节顺序转换.不过可以⽤格式中的第⼀个字符来改变对齐⽅式.定义如下:> 字符
字节顺序
长度和对齐⽅式
> @
native
native
> =
native
standard
> <
little-endian
standard
> >
big-endian
standard
> !
network (= big-endian)
standard
有了struct,我们就可以很容易操作⼆进制数据了.
⽐如有⼀个结构体:
struct Header
{
茄子盖饭unsigned short id;
char[4] tag;
unsigned int version;
unsigned int count;
}
通过v接收到了⼀个上⾯的结构体数据,存在字符串s中,现在需要把它解析出来,可以使⽤unpack()函数.
import struct
外贸网站优化小鱼简笔画图片id, tag, version, count = struct.unpack("!H4s2I", s)
上⾯的格式字符串中,!表⽰我们要使⽤⽹络字节顺序解析,因为我们的数据是从⽹络中接收到的,在⽹络上传送的时候它是⽹络字节顺序的.后⾯的H表⽰⼀个unsigned short的id,4s表⽰4字节长的字符串,2I表⽰有两个unsigned int类型的数据.
就通过⼀个unpack,现在id, tag, version, count⾥已经保存好我们的信息了.
一带一路政策
同样,也可以很⽅便的把本地数据再pack成struct格式.
ss = struct.pack("!H4s2I", id, tag, version, count);
pack函数就把id, tag, version, count按照指定的格式转换成了结构体Header,ss现在是⼀个字符串(实际上是类似于c结构体的字节流),可以通过socket.nd(ss)把这个字符串发送出去.

本文发布于:2023-07-19 04:39:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1087288.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   字节   字符串   进制
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图