我正在尝试实现一个代码,在这个代码中可以获取字符串并将其转换为二进制,然后获取二进制的补码并再次将其转换为字符串。在我的代码中,我已经将字符串转换为二进制,当我将二进制代码输入到一次补码中时,问题是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)))
目前没有回答
相关问题 更多 >
编程相关推荐