【erlang】bcd码与ascii码的互相转化

——小夏啊,你去熟悉下bcd码和ascii码的转化,8583报文解析会用到。

——好的。

百度,开启。

bcd码的画风: 123 => 0001 0010 0011  (最常用的8421)

百度,关闭。

实际bcd码的画风 <<"abc">> 

(╯‵□′)╯︵┻━┻


言归正传,我仔仔细细的研究了下大佬给的实现代码(瞎g2试),然后终于发现了这其中的门道。

bcd码转ascii码,以 <<"abc">> 为例,a的ascii码数字是97,bc分别是98,99,也就说 <<"abc">> = <<97,98,99>> 。97的16进制写法为0x61,转化的结果是 <<"616263">> 。在这里有一点需要注意,就是结果长度肯定是双数,也就说 <<0>> => <<"00">>。

ascii码转bcd码,也是同样的,以 <<"1a2b3c4d5e6f">> 为例,0x1a的10进制结果为26,两位求一次十进制,最后的结果为 <<26,43,60,77,94>>  。在这里,bcd码是8583报文传输时的内容,而ascii码是可视化的解析出来的数据。

我猜想,erlang的bcd码表示和语言本身的特殊性有关,倘若海明码是以01的格式传输的,应当是先转为十进制数,然后转化为十六进制的ascii码表示。又或许,这只是命名上的雷同,如果你也遇到相同的境地,希望这篇文章能有所帮助。

你可能感兴趣的:(【erlang】bcd码与ascii码的互相转化)