2011-10-10 1 views
1

BCD를 Ascii로 변환하는 루비 코드를 찾고 있습니다. 많은 코드로 시도했지만 올바른 결과를 얻지 못했습니다.루비의 이진 코드 십진수 (BCD)를 ASCii로 변환

제안 사항이나 코드 샘플이 있습니까?

+0

지금까지 시도한 것은 무엇입니까? 실제로 (거의/거의) 작동하지 않는 샘플이 있습니까? 어떤 종류의 결과를 얻었습니까? – arnep

답변

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" 

, 당신은 각각 위의 두 가지 방법으로 정수 및 문자열 클래스를 확장 할 수 인수없이 매개 변수 이름을 self로 대체하십시오. 그러나 누군가가 표준 클래스를 확장하는 아이디어를 좋아하지 않는 이유는 그것이 깨끗하고 안전한 프로그래밍 습관이 아니기 때문입니다.

2

이다. 당신이 이미 BCD로 변환 한 가정 :

bcd_val.to_s(16) 

이것은 진수의 BCD 값으로 변환하지만, 각 니블은 숫자이며, 모든 숫자는 0-9 사이이기 때문에, 효과적으로 정수 문자열로 표시됩니다.

bcd 번호가 LSB에서 MSB로 저장되는 경우 (bcd로 변환 한 방법에 따라 다름) 숫자가 거꾸로 표시됩니다. 이 시점에서 필요에 따라 사용자 str.reverse을 항상 사용할 수 있습니다.

관련 문제