为了账号安全,请及时绑定邮箱和手机立即绑定

将 str 解释为十六进制字符序列

将 str 解释为十六进制字符序列

一只斗牛犬 2022-06-14 10:03:38
这对你有用吗?import numpy as np                                                                                                                                                                     a = np.array([0, 1, 1, 0, 0, 1, 0])                                                                                                                                                    b = np.array([1, 2, 3, 4, 5, 6, 7])                                                                                                                                                    print(np.array([a*b,(1-a)*b]))[[0 2 3 0 0 6 0][1 0 0 4 5 0 7]]我正在开发一个校验和函数,其中 4 个字节被转换为下面列出的十六进制字符串(例如'00ABCDEF'):packet = "004100ff"checksum = 0for el in packet:    checksum ^= ord(el)print (hex(checksum))目前,获得正确校验和(0xbe)的唯一方法是手动将字符串重写为 packet = '\x00\x41\x00\xff' ,这无法自动完成。我怎样才能让python解释字符串,就好像每2个字符都是十六进制字节来执行校验和?
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

我怎样才能让python解释字符串,就好像每2个字符都是十六进制字节来执行校验和?


用于bytes.fromhex()将 解释str为一系列十六进制数字:


>>> packet = "004100ff"

>>> bytes.fromhex(packet)

b'\x00A\x00\xff'

还要注意,迭代会给bytes你int,所以不再需要ord():


>>> for el in bytes.fromhex(packet): print(el)  # or list(bytes.fromhex(packet))

... 

0

65

0

255


查看完整回答
反对 回复 2022-06-14
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

如果我正确理解你的问题。这应该有效。


packet = "004100ff"

checksum = 0

bytes_string = [packet[i:i+2] for i in range(0, len(packet), 2)]

for byte_string in bytes_string:

    checksum ^= int(byte_string, 16)

print(hex(checksum))


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号