将字符串的补码转换为二进制并显示字符串

2024-06-25 22:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个代码,在这个代码中可以获取字符串并将其转换为二进制,然后获取二进制的补码并再次将其转换为字符串。在我的代码中,我已经将字符串转换为二进制,当我将二进制代码输入到一次补码中时,问题是1的补码:000 2的补码:001 下面的代码是将字符串转换为二进制

     def string2bits(s=''):
    return [bin(ord(x))[2:].zfill(8) for x in s]

def bits2string(b=None):
    return ''.join([chr(int(x, 2)) for x in b])

s = 'Hello'
b = string2bits(s)
s2 = bits2string(b)

print ('String:')
print (s)

print ('\nList of Bits:')
for x in b:
    print(x)

print ('\nString:')

假设您输入字符串:Hello;输出将 ['01001000'、'01100101'、'01101100'、'01101100'、'01101111']

在此之后,我尝试在下面的代码中取一次补码,但显示了结果: 1的补码:000 2的补码:001

补码

import string_binary as x
# Python3 program to print 1's and 2's 
# complement of a binary number 

# Returns '0' for '1' and '1' for '0' 
def flip(c): 
    return '1' if (c == '0') else '0'

# Print 1's and 2's complement of 
# binary number represented by "bin" 
def printOneAndTwosComplement(bin): 

    n = len(bin) 
    ones = "" 
    twos = "" 

    # for ones complement flip every bit 
    for i in range(n): 
        ones += flip(bin[i]) 

    # for two's complement go from right 
    # to left in ones complement and if 
    # we get 1 make, we make them 0 and 
    # keep going left when we get first 
    # 0, make that 1 and go out of loop 
    ones = list(ones.strip("")) 
    twos = list(ones) 
    for i in range(n - 1, -1, -1): 

        if (ones[i] == '1'): 
            twos[i] = '0'
        else:        
            twos[i] = '1'
            break

    # If No break : all are 1 as in 111 or 11111 
    # in such case, add extra 1 at beginning 
    if (i == -1): 
        twos.insert(0, '1') 

    print("1's complement: ", *ones, sep = "") 
    print("2's complement: ", *twos, sep = "") 

# Driver Code 
if __name__ == '__main__': 
    bin = "x.b"
    printOneAndTwosComplement(bin.strip("")) 

在最后一段代码中,我试图显示字符串 但是它的给定问题第17行,在print(chr(int(x[8:],2)))

溢出错误:Python int太大,无法转换为C long

将二进制代码转换为字符串代码:

import sys 
x = "10001111100101110010111010111110011110011011011111110010100011111001011100101110101111100111"
print(chr(int(x[:8], 2)))
print(chr(int(x[8:], 2)))

Tags: and字符串代码inforifbindef