新手问题 [Solved] 请问如何转码为压缩 BCD 码存储?

jjzxcc · 2013年07月01日 · 最后由 hhuai 回复于 2013年07月01日 · 3456 次阅读

有一个字符串

1500000001021234567890120000000000000000000000000088899910EBE750C7B5E36CB02D3DD3BEB5DE6F002EA242E367C0C099BDD6863F6F3B5E739EC6D6F71F12E117A1B65418A8C096BEDA64E67EE6CD62C55E5F5D927F53A1D11234567890120000000000000000000000000088899910EBE750C7B5E36CB02D3DD3BEB5DE6F002EA242E367C0C099BDD6863F6F3B5E739EC6D6F71F12E117A1B65418A8C096BEDA64E67EE6CD62C55E5F5D927F53A1D1

它的十六进制显示为

3135 3030 3030 3030 3031 3032 3132 3334
3536 3738 3930 3132 3030 3030 3030 3030
3030 3030 3030 3030 3030 3030 3030 3030
3030 3838 3839 3939 3130 4542 4547 3530
4337 4235 4445 3646 3030 3245 4132 3432
....

我现在需要将他保存为压缩 BCD 码。他的十六进制显示应该为

1500 0000 0102 1234 5678 9012 0000 0000 
0000 0000 0000 0000 0088 8999 10eb e750 
c7b5 e36c b02d 3dd3 beb5 de6f 002e a242
e367 c0c0 99bd d686 3f6f 3b5e 739e c6d6
...

不知道该怎么处理,求指导。

BCD 是用 1 个字节表示范围在 0...100 的数字 原始字符串是一串数字才有意义吧 -__-, 原始字符串带 A-F 当 hex 看的话每两个字符的范围就超出 100 了

string = "123948327323"
digits = []
string.chars.each_slice(2){|c1,c2| digits << ((c1 + c2).to_i 10) }
bcd_bytes = digits.pack 'C*'

你给的原始字符串就是 BCD, 然后你给的十六进制显示是原始字符串 才对

@luikore 我现在需要的是文件用十六进制编辑器打开就显示

1500 0000 0102 1234 5678 9012 0000 0000 
0000 0000 0000 0000 0088 8999 10eb e750 
c7b5 e36c b02d 3dd3 beb5 de6f 002e a242
e367 c0c0 99bd d686 3f6f 3b5e 739e c6d6
...

@luikore 就是 BCD 直接存到十六进制里。

#4 楼 @jjzxcc 如果你的问题只是:

我有一个字符串
"15000000010212345678901200000000..."
要把它存成一个文件, 十六进制编辑器打开就是
1500 0000 0102 1234 5678 9012 0000 0000

那就和 BCD 一毛线关系都没有,下面这样就可以了:

[string].pack 'H*'

bcd 码不是这样的,这个根本不用转换。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号