2013-11-22 112 views
0

所以我試圖取一個1和0的字符串,並將它轉換爲它的十進制數,就好像字符串是一個位串。我對Java相對不熟悉,所以我先用Python編寫函數,如下所示。它完美的作品。嘗試創建一個BitString(從Python到Java的翻譯)

def stringToBitString(bs): 
    # 
    # bs = "10101" 
    # 
    ans = 0  # 32 bits of 0 

    for bit in bs: 
     ans = (ans << 1) | (ord(bit) - ord('0')) 
    return (and) 

但是,在試圖將它翻譯成Java時,我提出了這個問題。

public int toInt(String path) { 

    int answer = 0; 

    for(int i = 0; i < path.length(); i++) { 

     int bit = path.charAt(i); 
     answer = (answer << 1) | (bit - 0); 
    } 
    return answer;   
} 

這個方法確實給了我一個int,但是以ASCII的形式。例如,stringToBitString(「1」)產生1,而toInt(「1」)產生48.任何人都可以告訴我在這一點上我做錯了什麼?

回答

0

什麼,你正在做的是減法'1''0'具有ASCII值49480導致4948

char bit = path.charAt(i); 
answer = (answer << 1) | (bit - '0'); 
+0

非常感謝!完美的作品,你也可以解釋單引號和雙引號之間的區別是什麼? – user3015233

+0

@ user3015233您可以使用單引號來定義字符文字,例如「a」,「1」,「c」,...,而雙引號用於定義字符串文字,例如「」a 「','」abc「'。可能會讓你煩惱的主要原因是'Python'沒有一個字符的概念。它只有字符串的概念。另一方面,'Java'在單個字符和字符串之間有所不同。 – svs