BCD码转换为ASCII码的问题

szyss 2004-04-15 12:03:56
大家好,请问怎么将BCD码数据转换为ASCII码。
多谢!
...全文
1247 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
superszhu 2004-04-15
  • 打赏
  • 举报
回复
UP
Wenking003 2004-04-15
  • 打赏
  • 举报
回复
另一个思路:
定义:Bcd, HBcd,LBcd都是 Byte 类型
HAsc,LAsc ,txt是string
存放Bcd码的变量是 Bcd
它可以分解为高4位和低4位两个Bcd数码:
高4位的BCD码放于 HBcd=Bcd \16
低4位的BCD码放于 LBcd=Bcd Mod 16
对应高4位的BCD码的ASC码放于 HAsc
if HBcd >=0 and HBcd<=9 then
HAsc = asc(HBcd + 48)
else
HAsc = asc(HBcd + 55)
对LBcd也做同样的处理,然后结果字串txt=txt & HAsc & LAsc &......
就是以十六进制表示的BCD码的ASCII字串。
如果需要也很容易翻译为十进制表示的字串,这里就不多讲了。
陈年椰子 2004-04-15
  • 打赏
  • 举报
回复
以上是转贴
陈年椰子 2004-04-15
  • 打赏
  • 举报
回复
不太容易说清楚。这里做了两个函数,直接调用就可以了
'由ASCII码转BCD码
Function AscToBCD(ASCII() As Byte) As Byte()
Dim i As Integer
Dim bTemp As Byte
Dim bBCD() As Byte
Dim bAsc() As Byte
Dim bA As Byte
Dim bB As Byte
Dim intLen As Integer

intLen = UBound(ASCII)

If intLen Mod 2 = 0 Then intLen = intLen + 1
ReDim bAsc(intLen) As Byte
ReDim bBCD((intLen + 1) / 2 - 1) As Byte

For i = 0 To UBound(ASCII)
bAsc(i) = ASCII(i)
Next

If intLen > i Then bAsc(intLen) = &H0 '对数组不是偶数的补位

For i = 0 To intLen
If bAsc(i) < Asc("0") Then
bAsc(i) = Asc("0")
ElseIf ((bAsc(i) > Asc("9")) And (bAsc(i) < Asc("A"))) Then
bAsc(i) = Asc("0")
ElseIf ((bAsc(i) > Asc("F")) And (bAsc(i) < Asc("a"))) Then
bAsc(i) = Asc("0")
ElseIf (bAsc(i) > Asc("f")) Then
bAsc(i) = Asc("0")
End If

If (bAsc(i) >= Asc("0") And bAsc(i) <= Asc("9")) Then
bA = bAsc(i) - Asc("0")
ElseIf (bAsc(i) >= Asc("a") And bAsc(i) <= Asc("z")) Then
bA = bAsc(i) - Asc("a") + &HA
Else
bA = bAsc(i) - Asc("A") + &HA
End If

i = i + 1

If bAsc(i) < Asc("0") Then
bAsc(i) = Asc("0")
ElseIf ((bAsc(i) > Asc("9")) And (bAsc(i) < Asc("A"))) Then
bAsc(i) = Asc("0")
ElseIf ((bAsc(i) > Asc("F")) And (bAsc(i) < Asc("a"))) Then
bAsc(i) = Asc("0")
ElseIf (bAsc(i) > Asc("f")) Then
bAsc(i) = Asc("0")
End If

If (bAsc(i) >= Asc("0") And bAsc(i) <= Asc("9")) Then
bB = bAsc(i) - Asc("0")
ElseIf (bAsc(i) >= Asc("a") And bAsc(i) <= Asc("z")) Then
bB = bAsc(i) - Asc("a") + &HA
Else
bB = bAsc(i) - Asc("A") + &HA
End If

bBCD((i - 1) / 2) = (bA * 16) Xor bB
Next

AscToBCD = bBCD
End Function
---------------------------------------------------------------

调用BCDToAsc
Private Sub Command1_Click()
Dim bA(3) As Byte
Dim bB() As Byte
Dim i As Integer

bA(0) = Asc("1")
bA(1) = Asc("0")
bA(2) = Asc("a")
bA(3) = Asc("F")

bB = AscToBCD(bA)
For i = 0 To UBound(bB)
MsgBox Hex(bB(i))
Next
End Sub
结果为 &H10 和&HAF
---------------------------------------------------------------

'由BCD转ASCII码
Function BCDToAsc(BCD() As Byte) As Byte()
Dim i As Integer
Dim bTemp As Byte
Dim bAsc() As Byte
Dim intLen As Integer

intLen = UBound(BCD)
ReDim bAsc(intLen * 2 + 1) As Byte '重新定义数组上标

For i = 0 To intLen
bTemp = (BCD(i) / 16) And &HF
If bTemp > 9 Then
bAsc(i * 2) = bTemp + Asc("A") - 10
Else
bAsc(i * 2) = bTemp + Asc("0")
End If

bTemp = BCD(i) And &HF

If bTemp > 9 Then
bAsc(i * 2 + 1) = bTemp + Asc("A") - 10
Else
bAsc(i * 2 + 1) = bTemp + Asc("0")
End If
Next

BCDToAsc = bAsc
End Function



以上是转贴
goodnow 2004-04-15
  • 打赏
  • 举报
回复
太好了,UP

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧