将字符串拆分为8个字符并将顺序颠倒两个字符

时间:2017-09-09 01:41:42

标签: python-3.x

我的脚本大部分都有效,但输出格式不是我想要的。

input_string = "A156C673017A85C112345678" 

步骤(1):将input_string分解为8个字符

A156C673
017A85C1
12345678 

步骤(2):反转字符

A156C673 => 73C656A1
017A85C1 => C1857A01
12345678 => 78563412

我希望输出为单个字符串,如下所示:

output_string=73C656A1C1857A0178563412

有人可以帮忙吗?

##########Step(1)break string into 32 bits chunk###########
input_string = "A156C673017A85C112345678"#330F2345"
print (f"original string is {input_string}\n")
step=8
for i in range (0,len(input_string),step):
    if i==0:

        string_byte_reverse_rev2(input_string[i:step],output_file,1)
        print (f'string2b is {input_string[i:i+step]}\n')
    else:
        string_byte_reverse_rev2(input_string[i:i+step],output_file,1)
        print (f'string2b is {input_string[i:i+step]}\n')

##########Step(2)Reverse every 2 characters###########

def string_byte_reverse_rev2(string,output_file,label):    
    stringrev=[]
    for i in range (len(string)-1,-1,-2):
        stringrev.append(string[i-1])
        stringrev.append(string[i])
    print(''.join(stringrev))

2 个答案:

答案 0 :(得分:1)

您可以使用列表推导:

def divide(l, n):
    return [l[i:i+n] for i in range(0, len(l), n)]

input_string = "A156C673017A85C112345678"
parts = divide(input_string, 8)
stringrev = ''.join(''.join(divide(part, 2)[::-1]) for part in parts)
print(stringrev) # => "73C656A1C1857A0178563412"

答案 1 :(得分:1)

正如我所理解的那样,这就是你所寻找的。

  • 将string_byte_reverse_rev2移到代码主体
  • 上方
  • 添加了将反向字节组合成单个字符串
  • 的第三步

这与你所拥有的相差不远,只是清理了一些东西(不想使用与你想到的完全不同的技术)。

#string reversal in pairs
def string_byte_reverse_rev2(string):
    stringrev = ""
    for _ in range (0, len(string), 2):
        stringrev = string[_ + 1] + stringrev
        stringrev = string[_] + stringrev
    # print(stringrev)
    return stringrev

##########Step(1)break string into 32 bits chunk###########
input_string = "A156C673017A85C112345678"
print (f"original string is {input_string}\n")
step = 8

##########Step(2)Reverse every 2 characters###########
for _ in range (0, len(input_string), step):
    string_byte_reverse_rev2(input_string[_ : _ + step])
    # print (f'string2b is {input_string[_ : _ + step]}\n')

##########Step(3)Combine into single reversed string##########
output_string = ""
for _ in range (0, len(input_string), step):
    output_string += string_byte_reverse_rev2(input_string[_ : _ + step])
print("reversed string is",output_string)

<强>输出:

original string is A156C673017A85C112345678

reversed string is 73C656A1C1857A0178563412