求实现字符串转BCD的函数,现有BCD转字符串VB函数如下
字符串转BCD(反向实现)
先拆解你给出的strBCDToStr函数逻辑:它把一个16位的Short类型BCD值,按每4位(1个十六进制位)拆解成单个数字字符,循环4次后拼接成4位数字字符串。比如输入Short值&H1234,会输出"1234"。
要实现反向功能(字符串转BCD),逻辑刚好相反:将4位数字字符串的每一位,依次转换为4位的BCD片段,拼接成一个16位的Short值。具体实现如下:
Public Function strToBCD(ByVal inputStr As String) As Short ' 输入验证:必须是4位纯数字字符串 If inputStr.Length <> 4 OrElse Not inputStr.All(AddressOf Char.IsDigit) Then Throw New ArgumentException("输入必须是4位数字字符串") End If Dim bcdValue As Short = 0 For Each c As Char In inputStr ' 将字符转为对应数字(ASCII码减48) Dim digit As Integer = Asc(c) - 48 ' 左移4位腾出空间,再将当前数字存入低4位 bcdValue = CShort((bcdValue << 4) Or digit) Next Return bcdValue End Function
代码说明
- 输入验证:提前过滤非4位、含非数字的非法输入,避免转换出错
- 核心逻辑:
- 初始化BCD结果为0
- 遍历字符串每一位,先把当前BCD值左移4位(相当于乘以16,腾出4位空间)
- 将当前字符对应的数字(0-9)通过按位或操作,存入BCD值的低4位
- 循环完成后得到完整的16位BCD值
验证示例
输入字符串"1234",函数会返回Short类型的&H1234(十进制4660),将这个值传入你原有的strBCDToStr函数,会还原为"1234",确认转换逻辑正确。
内容的提问来源于stack exchange,提问作者No hay Problema
相关产品推荐
相关产品推荐

