将变量插入十六进制字符串

时间:2018-12-13 02:59:06

标签: python string hex

客户端中有一个十六进制数据:

MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00\x00"
s.sendto(MESSAGE, (UDP_IP, UDP_PORT))

服务器将显示:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 00

但是当我想使用变量和for循环来增加最后一个数字时

for i in range(times):
     i += 1
     i = format(i, '02x')
MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00"+i
s.sendto(MESSAGE, (UDP_IP, UDP_PORT))

服务器将显示:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 30 32

“ + i”变为ASCII。...

所以我应该怎么做才能显示服务器:

16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 01
16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 02
16 01 12 03 1b 14 30 23 80 00 03 e8 00 00 00 03
...

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用"\x%02x" % i之类的字符串模式。

答案 1 :(得分:0)

不格式化数字,只需使用chr函数使用该代码创建一个字符。

而不是在循环中将1添加到i,只需更改循环的范围即可。

for i in range(1, times+1):
    i = chr(i)
    MESSAGE = "\x16\x01\x12\x03\x1b\x14\x30\x23\x80\x00\x03\xe8\x00\x00\x00"+i
    s.sendto(MESSAGE, (UDP_IP, UDP_PORT))