BCD를 Ascii로 변환하는 루비 코드를 찾고 있습니다. 많은 코드로 시도했지만 올바른 결과를 얻지 못했습니다.루비의 이진 코드 십진수 (BCD)를 ASCii로 변환
제안 사항이나 코드 샘플이 있습니까?
BCD를 Ascii로 변환하는 루비 코드를 찾고 있습니다. 많은 코드로 시도했지만 올바른 결과를 얻지 못했습니다.루비의 이진 코드 십진수 (BCD)를 ASCii로 변환
제안 사항이나 코드 샘플이 있습니까?
당신이 원하는,하지만 다음은 도움이 될 수 있기를 바랍니다 않는 것을 너무 확실하지 않다 : 당신이 좋아하는 경우
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로 대체하십시오. 그러나 누군가가 표준 클래스를 확장하는 아이디어를 좋아하지 않는 이유는 그것이 깨끗하고 안전한 프로그래밍 습관이 아니기 때문입니다.
나는 실제로 이런 종류의 일을 위해 보석을 썼다.
소스 코드는이 질문에 죽은 긴하지만, 난 그냥이 처리 https://github.com/dafyddcrosby/ruby_bcd
이다. 당신이 이미 BCD로 변환 한 가정 :
bcd_val.to_s(16)
이것은 진수의 BCD 값으로 변환하지만, 각 니블은 숫자이며, 모든 숫자는 0-9 사이이기 때문에, 효과적으로 정수 문자열로 표시됩니다.
bcd 번호가 LSB에서 MSB로 저장되는 경우 (bcd로 변환 한 방법에 따라 다름) 숫자가 거꾸로 표시됩니다. 이 시점에서 필요에 따라 사용자 str.reverse을 항상 사용할 수 있습니다.
지금까지 시도한 것은 무엇입니까? 실제로 (거의/거의) 작동하지 않는 샘플이 있습니까? 어떤 종류의 결과를 얻었습니까? – arnep