2014-03-31 274 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表中。

相關問題