2011-10-10 61 views

回答

1

這是不是太清楚你想要做什麼,但希望下面的幫助:

def to_bcd(n) 
    str = n.to_s 
    bin = "" 
    str.each_char do |c| 
    bin << c.to_i.to_s(2).rjust(4,'0') 
    end 
    bin 
end 

def to_dec(bcd) 
    n = "" 
    (bcd.length/4).times do |i| 
    n << Integer('0b'+bcd[i*4..(i*4+3)]).to_s 
    end 
    n 
end 


result = to_bcd(120) 
p result     #=> "000100100000" 
p to_dec(result)   #=> "120" 
p to_dec(result).to_i.chr #=> "x" 

如果你喜歡,你可以用兩種方法延長Integer和String類的上面,分別,沒有參數並用自己替換參數名稱。但有人不喜歡這個想法來擴展標準的類,因爲它不是一個乾淨/安全的編程習慣。

2

雖然這個問題是早就死了,我剛剛處理了這一點。假設你已經轉換爲BCD:

bcd_val.to_s(16) 

此轉換BCD數值爲十六進制,但由於每個四位是數字,所有數字0-9之間,它有效地顯示爲整數的字符串。

請注意,如果您的bcd編號存儲LSB到MSB(取決於您如何轉換爲bcd),編號將向後顯示。此時,您可以根據需要始終使用str.reverse

相關問題