Python 字节数组 和 16进制字符串转换
参考示例1
以下示例仅供参考,性能高低以实际测试情况为准,这里只考虑能否实现数据转换
字节(bytes)转字符串(str)
rec_msg = b'\x12\x55\xaa\xFF\x55\x34'
out_s = ''
for i in range(0, len(rec_msg)): # 获取字节数组字数据,注意引号 ' ' 之间有一个空格out_s = out_s + ' ' + (hex(int(rec_msg[i]))).upper()[2:].zfill(2)print(out_s) # >>> 12 55 AA FF 55 34
转换原理解析:分离出byte,转为int(), 再hex()转回16进制数后截取0x前缀,再遍历拼接成字符串
参考示例2
在例子中对指定的字符串:
faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5
使用了三种方法将其转换为大写字母并每隔2个字符用空格分割处理后得到一个新字符串,为:
FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00 03 E8 00 00 5F A5 5F B5 5F C5 5F D5
为验证三种方法的执行效率,对原字符串扩充为其100倍长度,然后执行10000次处理,从其耗时结果上看,第一种方法最慢,第二、三种方法较好。
# -*- coding: utf-8 -*-##-------------------------------------------------------------------------------
# Name: MySplit
# Description: 将指定的字符串转换为大写字母并每隔2个字符用空格分割后得到一个新字符串
# Author: Administrator
# Date: 2018/7/6
#-------------------------------------------------------------------------------import re
import time#待分割字符串
myStr = 'faa5fbb5fcc5fdd5010200000028000001900000000a002d00000000017d7840000003e800005fa55fb55fc55fd5'
#分割后: FA A5 FB B5 FC C5 FD D5 01 02 00 00 00 28 00 00 01 90 00 00 00 0A 00 2D 00 00 00 00 01 7D 78 40 00 00 03 E8 00 00 5F A5 5F B5 5F C5 5F D5def mySplit1(str):t=''for i in range(len(str)/2):t += str[2*i:2*(i+1)] + ' 't = t.upper()return tdef mySplit2(str):t = str.upper()p = re.compile('.{1,2}') # 匹配任意字符1-2次return ' '.join(p.findall(t))def mySplit3(str):t = str.upper()return ' '.join([t[2*i:2*(i+1)] for i in range(len(t)/2)])print('原始字符串:\n' + myStr + '\n')
print('转换后字符串:')
print('mySplit1: ' + mySplit1(myStr))
print('mySplit2: ' + mySplit2(myStr))
print('mySplit3: ' + mySplit3(myStr))print(u'\n耗时测试:')
myStr = myStr * 100
for f in [mySplit1, mySplit2, mySplit3]:t = time.time()for i in range(10000):f(myStr)print(f.func_name + ': ' + str(time.time()-t) + ' s')
假设:
hex_string = “deadbeef”
转换成字符串格式
>>> hex_data = hex_string.decode("hex")
>>> hex_data
"\xde\xad\xbe\xef"
转换成字节数组
>>> import array
>>> array.array('B', hex_data)
array.array('B', [0xDE, 0xAD, 0xBE, 0xEF])
转换成字节列表
>>> map(ord, hex_data)
[0xDE, 0xAD, 0xBE, 0xEF]
如果是2.6以后版本:
>>> bytearray(hex_data)
bytearray(b'\xde\xad\xbe\xef')
然而有可能出现无法打印的字符串,例如:\x12\x45\x00AB
这种情况下:不要用.decode(“hex”)
下面的将返回bytearray,并在python3中正常工作
bytearray.fromhex(“de ad be ef 00”)
使用binascii
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
直接编写程序
data = "fef0babe"
bits = ""
for x in xrange(0, len(data), 2)bits += chr(int(data[x:x+2], 16))
还原byte型字符串
binascii.b2a_hex(hex_data)
相关文档:
stackoverflow
https://www.cnblogs.com/luke0011/p/9278777.html
https://blog.csdn.net/Yuyh131/article/details/106574449
Python 字节数组 和 16进制字符串转换相关推荐
- 字符串转16进制字节数组,字节数组转16进制字符串
/// <summary>/// 字符串转16进制字节数组/// </summary>/// <param name="hexString">& ...
- C++实现字节数组与16进制字符串互转,字符串转16进制字符串
1 无符号字节数组转16进制字符串 std::string bytesToHexString(const BYTE* bytes,const int length) {if (bytes == NUL ...
- java 字节 16进制_Java字节数组和16进制字符串的互相转化
背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...
- 加解密后字节数组和(16进制)字符串的相互转换问题
前面几篇博客简单归纳了Android中有涉及到的编码和加解密相关的问题,在这里想再补充下加密解密过程中遇到的字节数组和字符串的转换问题.前面博客中包含了转换的代码,由于这个属于所有加解密共性的问题,所 ...
- 16进制字符串转成字节数组、字节数组转16进制字符串、16进制字符串转成2进制字符串、中英文 字符串转16进制、16进制转换成中英文 字符串
因为需要与硬件相互通讯 用到了这些方法 亲测可用 /*** 16进制表示的字符串 转换为字节数组** @param hexString 16进制表示的字符串* @return byte[] 字节数组* ...
- 加密解密基础问题:字节数组和(16进制)字符串的相互转换
在加密时,一般加密算法和hash算法,它们操作的都是字节数组,对字节数组按照加密算法进行各种变换,运算,得到的结果也是字节数组.而我们一般是要求对字符串进行加密,所以就涉及到字符串String到 by ...
- 数据转换(字节数组转文件、文件转字节数组、16进制字符转字节数组、字节数组转16进制字符)
字节数组转文件 procedure ByteArrayToFile(const ByteArray: TByteDynArray;const FileName: string); varCount: ...
- c++ byte数组转int, int转byte数组,byte数组转16进制字符串,16进制字符串转byte数组
int转byte数组: void IntToBytes(int num, unsigned char* bytes, int size) { for (int i = 0; i < si ...
- Android 蓝牙BLE串口通信之高低位转换、16进制字符串转换float浮点型
蓝牙技术的普及与发展,为传统设备提供了一种低成本无线通信的方式.串口作为一种使用广泛的通信接口,通过串口转蓝牙,进行无线通信传输的需求逐渐展现出来. 蓝牙串口模块是嵌入式设备上的常用模块,它可以方便地 ...
最新文章
- 堆木板问题——木板能堆无限远而不倒吗?
- mysql job_MySQL数据传输中dtle 之 job 实现简析-爱可生
- 抖音xgorgon0408分析
- asp.net core安全事项(上)
- 将传统 ASP.NET 应用迁移到 .NET Core
- 中天数相减获得差_Power BI 了解DAX中LASTDATE和MAX之间的区别
- linux crontab定时任务常用梳理
- js初步简单的编程代码
- 【2016年第5期】跨社交媒体网络大数据下的用户建模
- ios端input 光标问题
- 程序员恶搞图片===爆笑中......娱乐一下.....
- BOM有效日期的设置
- oracle11204补丁包,Oracle 11.2.0.4 RAC 最新补丁下载(11.2.0.4.200714)
- CNN实现简单语音识别(单词识别)
- d3d11初窥(Introduction to 3D Game Programming with DirectX 11下载)
- 编译器对源代码的编译过程
- ipa文件反编译_苹果ipa文件中信息的提取与加密文件的反编译
- 半监督学习之伪标签(pseudo label,entropy minimization,self-training)
- visio 中取消 交叉连接线的拱形的方法
- [渝粤教育] 西南科技大学 电子信息工程专业导论 在线考试复习资料