2014-03-31 169 views
0

我需要一些帮助将字符串转换为二进制。我必须使用自己的代码来完成它,而不是内置函数(除非我可以使用'ord'来将字符转换为十进制)。将字符串转换为二进制

我的问题是,它似乎只是将第一个字符转换为二进制,而不是字符串的所有字符。例如,如果您输入“hello”,它会将h转换为二进制文件,但不是整个文件。

这里是我到目前为止

def convertFile(): 

myList = [] 
myList2 = [] 
flag = True 

string = input("input a string: ") 

for x in string: 
    x = ord(x) 

    myList.append(x) 
print(myList) 

for i in range(len(myList)): 
    for x in myList: 
     print(x) 

     quotient = x/2 
     quotient = int(quotient) 
     print(quotient) 
     remainder = x % 2 
     remainder = int(remainder) 
     print(remainder) 
     myList2.append(remainder) 
     print(myList2) 

     if int(quotient) < 1: 
      pass 

     else: 
      x = quotient 

myList2.reverse() 

print ("" .join(map(str, myList2))) 

convertFile() 
+1

你需要写一些函数'decToBin',或'chrToBin',并为每个字母调用它... –

+0

也许'binascii.hexlify'或'binascii.unhexlify'? –

+0

你的Python版本是什么? – jfs

回答

0
def dec2bin(decimal_value): 
    return magic_that_converts_a_decimal_to_binary(decimal_value) 

ordinal_generator = (ord(letter) for letter in my_word) #generators are lazily evaluated 
bins = [dec2bin(ordinal_value) for ordinal_value in ordinal_generator] 
print bins 

顺便说一句,这是不好的

for x in myList: 
    ... 
    x = whatever 

因为一旦它进入X再次在你设置的X等于得到顶抛出并x被分配列表中的下一个值

+0

您可能的意思是:'''.join([dec2bin ord(c),padding)for input_string])'。虽然'ord(b'\ xff')== 255'不是ascii。而'ord('\ N {snowman}')== 9731'不是ascii(如果OP使用Python 3作为input()函数暗示的) – jfs

1

如果你只是想要“十六进制字符串”,你可以使用以下g snippet:

''.join('%x' % ord(i) for i in input_string) 

例如, 'hello'=>'68656c6c6f',其中'h'=>'68'在ascii表中。

相关问题