python3 字节与数字、字符等互转的方法。int、struct库等方法
文章目录
- int 与 bytes转换
- int 转 bytes
- bytes 转 int
- str 与 bytes互转
- 其他格式转字节
- 格式说明
- 转字节
- 字节转其他
字节在存储的时候根据存储的格式不同,可能会有大端小端之分,如果是数字,还有有符号无符号的区分,所以在自己处理的时候可能会有一些麻烦。所以记录一下转换的方法,希望有同样遇到的人可以对其提供一些帮助。
常见的数据类型:
| 数据类型 | 字节长度 | 取值范围 |
|---|---|---|
| int8 | 1 | -128 ~ 127 |
| uint8 | 1 | 0 ~ 255 |
| int16 | 2 | -32768 ~ 32767 |
| uint16 | 2 | 0 ~ 65535 |
| int32 | 4 | -2^31 ~ 2^31 -1 |
| uint32 | 4 | 0 ~ 2^32 -1 |
int 与 bytes转换
int与bytes转换,在python3中还是比较简单的,int已经自带了方法,可以直接使用,不过需要事先确定:数据存储方式是大端存储还是小端存储,数据类型是什么。
int 转 bytes
例子:
# int 转 bytes
int.to_bytes(字节长度, 大端/小端存储, 关键字参数有符号还是无符号)
- 大端:big
- 小端:little# 例如:将数字128存储为int16类型的字节,在计算机里小端存储
# 如果实际数字超出了存储字节的长度,将会报错
int(128).to_bytes(2, 'little', signed=True)# 结果:b'\x80\x00'
bytes 转 int
例子:
# bytes 转 int
int.from_bytes(字节, 大端/小端存储, 关键字参数有符号还是无符号)
- 大端:big
- 小端:little# 例如:将刚刚存入的结果转回来
int.from_bytes(b'\x80\x00', 'little', signed=True)
# 如果你使用大端模式解析出来,你会发现一个完全不一样的数字
# 如果是只有一个字节的数据,大端小端也就无所谓了
str 与 bytes互转
这个还是比较简单的。
例如:
# str 转 bytes
# 这个转化只需要对str进行编码就好了,默认使用 utf-8编码
'章三'.encode()# bytes 转 str
# 相应的,只需要对bytes数据进行解码,默认使用 utf-8 编码
b''.decode()
其他格式转字节
其他格式转字节的话,可以借助struct 库来完成,这里简单介绍一下它的使用方式和一些参数。
在使用struct 库进行转化的时候,需要一个格式字符串说明数据是什么类型的,什么存储方式之类的信息,所以先介绍一下他的格式说明。
格式说明
格式设置字符如下:
第一个字符:存储方式
| 符号 | 说明 |
|---|---|
| @ | 本机存储顺序、存储大小、存储队列 (默认选项) |
| = | 本机存储顺序,标准存储大小、存储队列 |
| < | 小端序、标准存储大小、存储队列 |
| > | 大端序、标准存储大小、存储队列 |
| ! | 与 > 相同 |
其余字符表示参数的类型,必须完全匹配;这些可以在十进制重复计数之前:
| 符号 | 说明 |
|---|---|
| x | 填充字节,不是数据 |
| c | 字符 |
| b | byte类型,1字节整型 |
| B | 无符号byte |
| ? | _Bool (需要 C99;如果不可用,则使用 char 代替) |
| h | short类型 2字节整型 |
| H | 无符号short |
| i | int类型 4字节整型 |
| I(大写i) | 无符号int |
| l(小写L) | long类型 8字节整型 |
| L | 无符号long |
| f | float类型 (32为浮点类型) |
| d | double类型 |
| e | half-float (16位浮点类型) |
| s | string类型,也可以理解成字节数组。需要在s前存在一个十进制数字表示字符串的长度 |
格式为:
存储方式 + 类型
例如:
# 小端存储的 uinit32类型
<I# 大端存储的 float32 类型
>f# 小端存储的 10个字节的字符串数据
<10s
转字节
转字节使用struct.pack() 方法
该方法可以接收多个参数,分别是:
- 格式
- 变量1
- 变量2
- …
单个转
例如:
# 还是将128转化小端存储的,为2个字节存储的有符号数字类型
struct.pack('<h', 128)
# 因为是2个字节有符号的数字,所以应该选择 short 类型 所以格式为 '<h'
# 结果为:b'\x80\x00'# 将128.0 转化为小端存储的float类型的字节
struct.pack('<f', 128.)
# 结果为: b'\x00\x00\x00C'
转多个
例如:
# 第一个是无符号整数 128 ,然后后变有一个3个字节的字符串 '秀', 使用小端存储
struct.pack('<I3s', 128, u'秀'.encode())
# 结果:b'\x80\x00\x00\x00\xe7\xa7\x80'
字节转其他
字节转化为其他类型,使用 struct.unpack() 方法,结果是一个元组
该方法可以接收2个参数,分别是:
- 格式
- 字节
例如:
# 将第一个是无符号整数 128 ,然后后变有一个3个字节的字符串 '秀', 使用小端存储的数据转回来
struct.unpack('<I3s', b'\x80\x00\x00\x00\xe7\xa7\x80')
# 结果为:(128, b'\xe7\xa7\x80')# 将使用小端存储的128.0的字节转换回来
struct.unpack('<f', b'\x00\x00\x00C')
# 结果为: (128.0,)
希望可以帮到你!
曾经沧海难为水,
除却巫山不是云。
取次花丛懒回顾,
半缘修道半缘君。
相关文章:
python3 字节与数字、字符等互转的方法。int、struct库等方法
文章目录int 与 bytes转换int 转 bytesbytes 转 intstr 与 bytes互转其他格式转字节格式说明转字节字节转其他字节在存储的时候根据存储的格式不同,可能会有大端小端之分,如果是数字,还有有符号无符号的区分,所以在自己处理的时候…...
人脸检测的5种方式
文章内容: 1)人脸检测的5种方法 1. Haar cascade opencv 2. HOG Dlib 3. CNN Dlib 4. SSD 5. MTCNN 一。人脸检测的5种方法实现 1. Haar cascade opencv Haar是专门用来检测边缘特征的。基本流程如下: 第1步,读取图片 img …...
华为OD机试 - 乘积最大值(Python)
乘积最大值 题目 给定一个元素类型为小写字符串的数组 请计算两个没有相同字符的元素长度乘积的最大值 如果没有符合条件的两个元素返回0 输入 输入为一个半角逗号分割的小写字符串数组 2 <= 数组长度 <= 100 0 < 字符串长度 <= 50 输出 两个没有相同字符的元…...
【CMU15-445数据库】bustub Project #2:B+ Tree(上)
(最近两个月学校项目有亿点忙,鸽得有点久,先来把 Project 2 补上) 本节实验文档地址:Project #2 - BTree Project 2 要实现的是数据结构课上都会讲的一个经典结构 B 树,但是相信大多数的同学(…...
功率放大器在lamb波方向算法的损伤定位中的应用
实验名称:基于PZT结Lamb波方向算法的损伤定位方法研究方向:损伤定位测试目的:Lamb波是在具有自由边界的固体板或层状结构中传输的一种弹性导波,由于其本身的传播特性,如沿传播路径衰减小,能量损失小&#x…...
时的科技迎1亿融资,这辆“空中的士”能否实现真正飞行?
近期,进行载人eVTOL的研发、生产和销售的时的科技宣布完成1亿元Pre-A轮融资,成立不到两年,这已是时的科技的第三轮融资,此前,时的科技已获得蓝驰创投和德迅投资千万美元种子轮投资。在不少人看来,时的科技所…...
idea 折叠代码块技巧 关于<editor-fold>
最近在使用delombok插件的时候,发现了一个有意思的小技巧 以前用VSstudio写代码的时候。经常使用代码块折叠的方法。但是在写java的时候,没怎么使用过 VSStudio中的写法 即 #region xxx ... your great coding #endregion这样在浏览的时候,…...
python|第五章考试题及练习题
本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第五章考试题及练习题的学习记录。 一、考试题 1、随机密码生成 问题描述: 描述 补充编程模板中代码,完成如下功能:…...
DIY生日蛋糕笔记
自制6寸生日蛋糕笔记 实验环境: 长帝CRTF32PD搪瓷烤箱32升, 九阳电动打蛋器, 裱花盘一套 蛋糕盒子 称重器 硅胶刀 两个大碗1号和2号。 材料: 参考: https://www.bilibili.com/video/BV1t34y1Z7mL/?spm_id_from333…...
MybatisPlus------常用注解和逻辑删除以及设置统一前缀以及主键生成策略(六)
MybatisPlus------常用注解以及设置统一前缀以及主键生成策略(六) 在使用MybatisPlus的过程中时,实力类的Mapper继承BaseMapper,此时不要添加TableName注解也能够对表数据实现增删改查。 // mybatispuls 提供了接口实现单表的增…...
JQuery工具框架
JQuery工具框架 直接使用js编程比较麻烦,而且还必须考虑浏览器的差异性。 为了简化javascript的开发,一些javascript库诞生了。当今流行的javascript库有:jQuery诞生于2005 年,Dojo、 EXT_JS、DWR、YUI… jQuery是John Resig在…...
同一个整型常量怎样在不同进制间之间转换?
整型常量可以分别用二进制、八进制、十进制和十六进制表示,不同的进制并不影响数据本身的大小,同一个整型常量可以在不同进制之间转换,具体转换方式如下。1.十进制和二进制之间的转换(1)十进制转二进制。十进制转换成二进制就是一个除以2取余…...
UVa 225 Golygons 黄金图形 暴力搜索 剪枝 状态判断
题目链接:Golygons 题目描述: 给定nnn和kkk个障碍物的坐标,你需要走nnn次,第一次走一个单位距离,第二次走二个单位距离,…,第nnn次走nnn个单位距离。走得过程中不能穿过或者到达障碍物所在的点&…...
PowerShell中的对象是神马?
在PowerShell中,无处不在体现出一个概念,这个概念是什么呢?就是对象,对象是面向对象的语言中非常重要的概念,PowerShell的底层是.net,也是面向对象的语言,因此它也继承了面向对象的语言的语法特性。但是很多人在使用PowerShell 语言的时候会觉得有些疑惑,到底什么是Pow…...
Proxy lab
CSAPP Proxy Lab 本实验需要实现一个web代理服务器,实现逐步从迭代到并发,到最终的具有缓存功能的并发代理服务器。 Web 代理是充当 Web 浏览器和终端服务器之间的中间人的程序。浏览器不是直接联系终端服务器获取网页,而是联系代理&#x…...
【机器学习】Sklearn 集成学习-投票分类器(VoteClassifier)
前言 在【机器学习】集成学习基础概念介绍中有提到过,集成学习的结合策略包括: 平均法、投票法和学习法。sklearn.ensemble库中的包含投票分类器(Voting Classifier) 和投票回归器(Voting Regressor),分别对回归任务和分类任务的…...
Day892.MySql读写分离过期读问题 -MySQL实战
MySql读写分离过期读问题 Hi,我是阿昌,今天学习记录的是关于MySql读写分离过期读问题的内容。 一主多从架构的应用场景:读写分离,以及怎么处理主备延迟导致的读写分离问题。 一主多从的结构,其实就是读写分离的基本…...
无线蓝牙耳机哪个品牌音质好?性价比高音质好的蓝牙耳机排行榜
其实蓝牙耳机购买者最担忧的就是音质问题,怕拿到手的蓝牙耳机低频过重又闷又糊,听歌闷耳的问题,但从2021年蓝牙技术开始突飞猛进后,蓝牙耳机的音质、连接甚至是功能都发生了很大的变化,下面我分享几款性价比高音质的蓝…...
店铺微信公众号怎么创建?
有些小伙伴问店铺微信公众号怎么创建,在解答这个问题之前,先简单说说店铺和微信公众号关系: 店铺一般是指小程序店铺,商家通过小程序店铺来卖货;微信公众号则是一个发布信息的平台。但是两者之间可以打通,…...
goLang Mutex用法案例详解
Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。 因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。 为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。 This concept is called mutual ex…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
