如何算术获取字符串中的最后一个字符?

问题描述 投票:0回答:2

我有一个十六进制字符串,我想一次打印出 32 个字符,从右到左。例如

11010401c3cf0e0e383434d0c0c302c2cb0a0a28242490808201c1c7060618141450404100c0c302020804041

应打印为

60618141450404100c0c302020804041
0c302c2cb0a0a28242490808201c1c70
000000011010401c3cf0e0e383434d0c

我尝试过:

for i in range(len(hex_str)//32+1):
    print(hex_str[-32*(i+1):-32*i].zfill(32))

但这给出了错误的输出:

00000000000000000000000000000000
0c302c2cb0a0a28242490808201c1c70
000000011010401c3cf0e0e383434d0c

这是因为在第一次迭代中,

-32*i
的计算结果为0,因此切片是
hex_str[-32:0]
,返回
None
。我知道正确的语法是
hex_str[-32:]
,但是如何在这样的循环中得到它?我最好的解决方案是

for i in range(len(inject)//32+1):
    print(hex_str[-32*(i+1):-32*i or None].zfill(32))

虽然感觉很丑。我应该接受这种感觉吗?还是有一些我没有意识到的东西?

python string slice reverse
2个回答
0
投票

-32*i or None
很有趣 - 有时很容易忘记您没有使用负索引等便利功能。

print(hex_str[-32*(i+1):len(hex_str)-32*i].zfill(32))

另一个值得考虑的无聊选择:

i = len(hex_str) - 32

while i > 0:
    print(hex_str[i:i+32])

print(hex_str[:i].zfill(32))

0
投票

而不是这个:

len(inject)//32+1

这个: (len(注入)+31)//32

示例:

s = "11010401c3cf0e0e383434d0c0c302c2cb0a0a28242490808201c1c7060618141450404100c0c302020804041"
for i in range((len(s) + 31)//32):
    print(s[i*32:(i+1)*32])

结果:

11010401c3cf0e0e383434d0c0c302c2
cb0a0a28242490808201c1c706061814
1450404100c0c302020804041
© www.soinside.com 2019 - 2024. All rights reserved.