进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等

废话不多上,直接上例子

整数之间的进制转换:

  • 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源码

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')

转自:https://blog.csdn.net/crylearner/article/details/38521685

[转]python常用的十进制、16进制、字符串、字节串之间的转换的更多相关文章

  1. python各进制、字节串间的转换

    >>> i = 13 >>> bin(i) '0b1101' >>> oct(i) '0o15' >>> hex(i) '0xd ...

  2. python常用的十进制、16进制、字符串、字节串之间的转换

    进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上,直接上例子 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 ...

  3. python经常使用的十进制、16进制、字符串、字节串之间的转换(长期更新帖)

    进行协议解析时.总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 废话不多上.直接上样例 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 ...

  4. python IP地址转16进制

    python IP地址转16进制 第一种方法: 通过socket.inet_aton实现 import socket from binascii import hexlify ary='192.168 ...

  5. python--常用的十进制、16进制、字符串、字节串之间的转换

      进行协议解析时,总是会遇到各种各样的数据转换的问题,从二进制到十进制,从字节串到整数等等 整数之间的进制转换: 10进制转16进制: hex(16)  ==>  0x10 16进制转10进制 ...

  6. iOS 16进制字符串转换成int十进制

    NSRange rangeErr; rangeErr.location = 6; rangeErr.length = 2; NSString *strings = [value substringWi ...

  7. Java中byte与16进制字符串的互换原理

    我们都知道Java中的byte是由8个bit组成的,而16进制即16中状态,它是由4个bit来表示的,因为24=16.所以我们可以把一个byte转换成两个用16进制字符,即把高4位和低4位转换成相应的 ...

  8. Java中byte与16进制字符串的互相转换

    * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串. * @param s ...

  9. [转]Java中byte与16进制字符串的互相转换

    Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符, ...

随机推荐

  1. ubuntu 新建root用户

    1. sudo passwd :设置root用户密码 2. 切换用户 方式一:su 方式二: su root 3. 新增普通用户

  2. Linux——临界段,信号量,互斥锁,自旋锁,原子操作

    一. linux为什么需要临界段,信号量,互斥锁,自旋锁,原子操作? 1.1. linux内核后期版本是支持多核CPU以及抢占式调度.这里就存在一个并发,竞争状态(简称竟态). 1.2. 竞态条件 发 ...

  3. 通过metaclass实现精简的ORM框架

    摘抄于<python-3-廖雪峰> 使用ORM框架 class User(Model): #定义类的属性到列的映射: id = IntegerFiled('id') name = Stri ...

  4. 绝对定位left:50% 隐式设置了宽度

    绝对定位left:50% 隐式设置了宽度 不定宽高的盒子如何在父盒子中垂直居中,我们常做的一种方式便是 left: 50%; top: 50%; transform: translate(-50%, ...

  5. vue项目1-pizza点餐系统10-axios实现登陆

    一.登陆思路 从数据库中拿到数据,每个用户信息都是一个对象,需要用数组存储对象信息,然后对比输入的用户信息,如果匹配成功就跳转到home主页,否则提示用户或密码错误. 二.具体操作 1.导入axios ...

  6. Ajax&Json笔记

    ## 今日内容     1. AJAX:     2. JSON # AJAX:     1. 概念: ASynchronous JavaScript And XML    异步的JavaScript ...

  7. SQL常见面试题-行列互换

      有一个SQL题在面试中出现的概率极高,最近有学生出去面试仍然会遇到这样的题目,在这里跟大家分享一下. 题目:数据库中有一张如下所示的表,表名为sales. 年 季度 销售量 1991 1 11 1 ...

  8. evpp::buffer使用

    evpp::Buffer testmsg; const char* buf123 = "12342333333333333333333333333323424324234234"; ...

  9. Python核心技术与实战——十一|程序的模块化

    我们现在已经总结了Python的基本招式和套路,现在可以写一些不那么简单的系统性工程或代码量较大的应用程序.这时候,一个简单的.py文件就会显得过于臃肿,无法承担一个重量级软件开发的重任.这就需要这一 ...

  10. mnist 卷积神经网络

    # from keras.models import Sequential# from keras.layers.core import Dense,Activation,Flatten #creat ...