python 10进制整数转16进制bytes

python 10进制整数转16进制bytes

用在串口发送,输入10进制数组,输出16进制

a = [1,3,4,5,6,7,8]
b = bytes(a).hex()
data = bytes.fromhex(b)

输出

b'\x01\x03\x04\x05\x06\x07\x08'

1.10进制转16进制

10进制和16进制转化用的是hex()int()

>>> a = 11
>>> b = hex(a)
>>> b
'0xb'
>>> type(a)
<class 'int'>
>>> type(b)
<class 'str'>

a 是整型,转成16进制b是字符串

>>> b = 0x11
>>> a = int(b)
>>> a
17
>>> type(a)
<class 'int'>
>>> type(b)
<class 'int'>

其中,a和b都是整型。

2.bytes中的hex 和fromhex

  • hex:将bytes的值转化为fromstr。

输入一个整数数组,得到一个16进制的字符串

>>> a = [0,1,2,3,4,5]
>>> bytes(a).hex()
'000102030405'
>>> type(bytes(a).hex())
<class 'str'>		# 输出是字符串

至于为什么要用bytes(a).hex()这么写,不懂,但是做了尝试。

>>> a = [1,2,3,4,5,6]
>>> b = bytes.hex(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: descriptor 'hex' for 'bytes' objects doesn't apply to a 'list' object 	# hex的参数应该是bytes,所以报错了。
>>> b = bytes(a)
>>> c = bytes.hex(b)
>>> c		# 首先将数组转成bytes,然后再用这个函数,可以正常打印
'010203040506'
>>> c= hex(b)		#直接用hex()函数将bytes转16进制也不行,hex()的输入必须是整数
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'bytes' object cannot be interpreted as an integer
  • fromhex:将fromstr的值转化为hex

输入16进制字符串,得到带\x的16进制bytes输出

>>> b = '000102030405'
>>> bytes.fromhex(b)
b'\x00\x01\x02\x03\x04\x05'
>>> type(b)
<class 'str'>
>>> type(bytes.fromhex(b))
<class 'bytes'> 	# 输出是bytes

3.补充

  • python中encode和decode

encode是编码,decode是解码

  • encode()将字符串转换成bytes类型
  • decode()将bytes类型解码成字符串
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用内置函数`bin()`将十六进制数换为二进制数。例如,要将十六进制数'A'换为4位二进制数,可以使用以下代码:`bin(int('A', 16))\[2:\].zfill(4)`。这里的`int('A', 16)`将十六进制数'A'换为对应的十进制数,然后`bin()`将其换为二进制数,并使用`\[2:\]`去掉前缀'0b',最后使用`zfill(4)`在前面补零,确保结果是4位二进制数。\[1\] 另外,如果你想要将十六进制数直接换为十六进制格式的字符串,可以使用`hex()`函数。例如,`a = '0x0012e'`,然后使用`b = hex(eval(a))`将其换为十六进制格式的字符串'0x12e'。需要注意的是,计算机在直接输出十六进制数时通常不会补零,所以'0x12e'和'0x0012e'在计算机中表示的是相同的值。\[2\] 如果你想将一个大整数换为二进制对象,可以使用`to_bytes()`方法。例如,`(2077392566271395359695912870032509).to_bytes(15, byteorder='big')`将大整数换为一个长度为15字节的二进制对象。这里的`byteorder='big'`表示使用大端字节序。\[3\] #### 引用[.reference_title] - *1* *2* [python16进制换为10进制](https://blog.csdn.net/weixin_42517317/article/details/114923933)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python进制换&字符串二进制对象&整数二进制对象&16进制字符串二进制对象(及其逆换)](https://blog.csdn.net/qq_45699846/article/details/123576137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值