——小夏啊,你去熟悉下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码表示。又或许,这只是命名上的雷同,如果你也遇到相同的境地,希望这篇文章能有所帮助。
网友评论