我正在寻找将BCD转换为Ascii的ruby代码。我尝试过很多代码,但是我没有得到正确的结果。
有任何建议或代码示例吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
虽然这个问题已经很久了,但我刚刚处理过这个问题。假设你已经转换为bcd:
bcd_val.to_s(16)
这会将bcd值转换为十六进制,但因为每个半字节都是一个数字,并且所有数字都在0-9之间,所以它实际上显示为一个整数字符串。
请注意,如果您的bcd编号存储在LSB到MSB(取决于您转换为bcd的方式),则该编号将向后显示。此时,您始终可以根据需要使用 str.reverse 。
答案 2 :(得分: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类,不带参数,并用self替换参数名称。但有人不喜欢扩展标准类的想法,因为它不是一个干净/安全的编程习惯。