python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)
进行协议解析时。总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等
废话不多上。直接上样例
整数之间的进制转换:
- 10进制转16进制: hex(16) ==> 0x10
- 16进制转10进制: int('0x10', 16) ==> 16
类似的还有oct(), bin()
-------------------
字符串转整数:
- 10进制字符串: int('10') ==> 10
- 16进制字符串: int('10', 16) ==> 16
- 16进制字符串: int('0x10', 16) ==> 16
-------------------
字节串转整数:
- 转义为short型整数: struct.unpack('<hh', bytes(b'\x01\x00\x00\x00')) ==> (1, 0)
- 转义为long型整数: struct.unpack('<L', bytes(b'\x01\x00\x00\x00')) ==> (1,)
-------------------
整数转字节串:
- 转为两个字节: struct.pack('<HH', 1,2) ==> b'\x01\x00\x02\x00'
- 转为四个字节: struct.pack('<LL', 1,2) ==> b'\x01\x00\x00\x00\x02\x00\x00\x00'
-------------------
字符串转字节串:
- 字符串编码为字节码: '12abc'.encode('ascii') ==> b'12abc'
- 数字或字符数组: bytes([1,2, ord('1'),ord('2')]) ==> b'\x01\x0212'
- 16进制字符串: bytes().fromhex('010210') ==> b'\x01\x02\x10'
- 16进制字符串: bytes(map(ord, '\x01\x02\x31\x32')) ==> b'\x01\x0212'
- 16进制数组: bytes([0x01,0x02,0x31,0x32]) ==> b'\x01\x0212'
-------------------
字节串转字符串:
- 字节码解码为字符串: bytes(b'\x31\x32\x61\x62').decode('ascii') ==> 12ab
- 字节串转16进制表示,夹带ascii: str(bytes(b'\x01\x0212'))[2:-1] ==> \x01\x0212
- 字节串转16进制表示,固定两个字符表示: str(binascii.b2a_hex(b'\x01\x0212'))[2:-1] ==> 01023132
- 字节串转16进制数组: [hex(x) for x in bytes(b'\x01\x0212')] ==> ['0x1', '0x2', '0x31', '0x32']
===================
測试用的python源代码
'''
Created on 2014年8月21日 @author: lenovo
'''
import binascii
import struct def example(express, result=None):
if result == None:
result = eval(express)
print(express, ' ==> ', result) if __name__ == '__main__': print('整数之间的进制转换:')
print("10进制转16进制", end=': ');example("hex(16)")
print("16进制转10进制", end=': ');example("int('0x10', 16)")
print("相似的还有oct(), bin()") print('\n-------------------\n') print('字符串转整数:')
print("10进制字符串", end=": ");example("int('10')")
print("16进制字符串", end=": ");example("int('10', 16)")
print("16进制字符串", end=": ");example("int('0x10', 16)") print('\n-------------------\n') print('字节串转整数:')
print("转义为short型整数", end=": ");example(r"struct.unpack('<hh', bytes(b'\x01\x00\x00\x00'))")
print("转义为long型整数", end=": ");example(r"struct.unpack('<L', bytes(b'\x01\x00\x00\x00'))") print('\n-------------------\n') print('整数转字节串:')
print("转为两个字节", end=": ");example("struct.pack('<HH', 1,2)")
print("转为四个字节", end=": ");example("struct.pack('<LL', 1,2)") print('\n-------------------\n') print('字符串转字节串:')
print('字符串编码为字节码', end=": ");example(r"'12abc'.encode('ascii')")
print('数字或字符数组', end=": ");example(r"bytes([1,2, ord('1'),ord('2')])")
print('16进制字符串', end=': ');example(r"bytes().fromhex('010210')")
print('16进制字符串', end=': ');example(r"bytes(map(ord, '\x01\x02\x31\x32'))")
print('16进制数组', end =': ');example(r'bytes([0x01,0x02,0x31,0x32])') print('\n-------------------\n') print('字节串转字符串:')
print('字节码解码为字符串', end=": ");example(r"bytes(b'\x31\x32\x61\x62').decode('ascii')")
print('字节串转16进制表示,夹带ascii', end=": ");example(r"str(bytes(b'\x01\x0212'))[2:-1]")
print('字节串转16进制表示,固定两个字符表示', end=": ");example(r"str(binascii.b2a_hex(b'\x01\x0212'))[2:-1]")
print('字节串转16进制数组', end=": ");example(r"[hex(x) for x in bytes(b'\x01\x0212')]") print('\n===================\n')
print("以上原理都比較简单。看一下就明确了。
python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)的更多相关文章
- python各进制、字节串间的转换
>>> i = 13 >>> bin(i) '0b1101' >>> oct(i) '0o15' >>> hex(i) '0xd ...
- python常用的十进制、16进制、字符串、字节串之间的转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 ...
- [转]python常用的十进制、16进制、字符串、字节串之间的转换
阅读目录(Content) 整数之间的进制转换: 字符串转整数: 字节串转整数: 整数转字节串: 字符串转字节串: 字节串转字符串: 测试用的python源码 进行协议解析时,总是会遇到各种各样的数据 ...
- python--常用的十进制、16进制、字符串、字节串之间的转换
进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16) ==> 0x10 16进制转10进制 ...
- iOS 16进制字符串转换成int十进制
NSRange rangeErr; rangeErr.location = 6; rangeErr.length = 2; NSString *strings = [value substringWi ...
- Java中byte与16进制字符串的互相转换
* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串. * @param s ...
- [转]Java中byte与16进制字符串的互相转换
Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...
- Java中byte与16进制字符串的互换原理
我们都知道Java中的byte是由8个bit组成的,而16进制即16中状态,它是由4个bit来表示的,因为24=16.所以我们可以把一个byte转换成两个用16进制字符,即把高4位和低4位转换成相应的 ...
- Java-byte[]与16进制字符串互转
转自: http://www.cnblogs.com/freeliver54/archive/2012/07/30/2615149.html Java中byte用二进制表示占用8位,而我们知道16进制 ...
随机推荐
- 🍓vue & react 一些重要但没必要死记硬背的东西
- Database学习 - mysql 视图/触发器/函数
- Spring Cloud Context模块
SpringCloud这个框架本身是建立在SpringBoot基础之上的,所以使用SpringCloud的方式与SpringBoot相仿.也是通过类似如下代码进行启动. SpringApplicati ...
- mac使用apktool打包回apk
升级最新版的apktool 下载目录:https://ibotpeaches.github.io/Apktool/install/. 权限修改 将上述的文件放在usr/local/bin目录下并执行 ...
- Linux centos系统安装后的基本配置,Linux命令
一.centos系统安装后的基本配置 .常用软件安装 yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tr ...
- android SDK模拟器环境搭建
一.下载安装android SDK 两种方式: (1)官网下载(需FQ):https://developer.android.com/studio/index.html (2)无需FQ下载:http: ...
- thinkphp5.0 ajax分页
放到 ***thinkphp\library\think\paginator\driver\Ajaxbootstrap.php 分页的type参数为ajaxbootstrap <?php/ ...
- 【由浅入深理解java集合】(四)——集合 Queue
今天我们来介绍下集合Queue中的几个重要的实现类.关于集合Queue中的内容就比较少了.主要是针对队列这种数据结构的使用来介绍Queue中的实现类. Queue用于模拟队列这种数据结构,队列通常是指 ...
- Centos查看系统CPU个数、核心数、线程数
1.查看 CPU 物理个数 grep 'physical id' /proc/cpuinfo | sort -u | wc -l 2.查看 CPU 核心数量 grep 'core id' /proc/ ...
- 使用SqlServer_Profiler跟踪慢查询
使用SQLProfiler(事件探查器)跟踪数据库操作及慢查询 1:应用程序连接SQL SERVER数据库服务器: 2:打开SQL Profiler开启数据库事件跟踪: (1):打开SQL Serve ...