bytes 字节串 与 hex字符串(16进制) 互转----python

转自: https://www.cnblogs.com/japhasiac/p/7739846.html

反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧。

1. 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转换是这样的:

>>> a = 'aabbccddeeff'
>>> a_bytes = a.decode('hex')
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.encode('hex')
>>> print(aa)
aabbccddeeff
>>>

2. 在python 3环境上,因为string和bytes的实现发生了重大的变化,这个转换也不能再用encode/decode完成了。

2.1 在python3.5之前,这个转换的其中一种方式是这样的:

>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = ''.join(['%02x' % b for b in a_bytes])
>>> print(aa)
aabbccddeeff
>>>

2.2 到了python 3.5之后,就可以像下面这么干了:

>>> a = 'aabbccddeeff'
>>> a_bytes = bytes.fromhex(a)
>>> print(a_bytes)
b'\xaa\xbb\xcc\xdd\xee\xff'
>>> aa = a_bytes.hex()
>>> print(aa)
aabbccddeeff
>>>

 

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Python内置函数`bytes()`和`.hex()`来将字符串换为16进制表示。具体方法如下: ```python str = "Hello World!" hex_str = bytes(str, encoding='utf-8').hex() print(hex_str) ``` 运行结果为: ``` 48656c6c6f20576f726c6421 ``` 其中,`bytes()`函数将字符串换为字节流,参数`encoding='utf-8'`指定编码格式为UTF-8;`.hex()`函数将字节换为16进制表示。 ### 回答2: Python中可以使用`binascii`模块中的`hexlify`函数将字符串换为16进制表示。 ```python import binascii def str_to_hex(string): hex_str = binascii.hexlify(string.encode()).decode() return hex_str ``` 在这里,我们首先使用`encode`函数将字符串换为字节流,然后使用`hexlify`函数将字节换为16进制表示。最后,我们使用`decode`函数将字节换回字符串,并将结果返回。 下面是一个例子: ```python message = "Hello, World!" hex_message = str_to_hex(message) print(hex_message) # 输出: 48656c6c6f2c20576f726c64214 ``` 在这个例子中,我们将字符串"Hello, World!"换为16进制表示,并输出结果"48656c6c6f2c20576f726c64214"。 ### 回答3: 在Python中,可以通过使用内置的hex函数将字符串换为十六进制。 hex函数将每个字符换为其对应的十六进制表示,然后将其连接成一个字符串。下面是一个示例: ```python string = "Hello, World!" # 原始字符串 hex_string = ''.join([hex(ord(c))[2:] for c in string]) # 将每个字符换为十六进制,并连接成一个字符串 print(hex_string) # 输出结果为 "48656c6c6f2c20576f726c6421" ``` 在上面的代码中,首先定义了一个字符串变量`string`,其值为"Hello, World!"。然后,通过列表推导式和`hex`函数,将每个字符换为其十六进制表示。`ord`函数用于获取字符的ASCII码,`hex`函数将ASCII码换为十六进制字符串。最后,使用`''.join()`函数将每个字符的十六进制表示连接成一个字符串。最终的结果为"48656c6c6f2c20576f726c6421"。 需要注意的是,`hex`函数返回的十六进制字符串以"0x"开头,而我们只需要字符之间的十六进制表示。因此,我们使用切片操作[2:]来去除开头的"0x"。 使用上述方法,你可以将任意字符串换为十六进制表示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值