如何将一个字节的数据,使用vb转换成两个ascii码
我这两天使用通讯协议分析软件(我多年前用qbasic编写的)分析了一下日本fanuc plc eprom读写器 fa-writer。发现它在读、写eprom时,将读出的eprom中的一个字节,按照高4位、低四位转换成两个相应的ascii码,从串口发送或接收。
例如:
(hex) (ascii)
eprom内容 发送的内容
0A 30 41
14 B1 B4 '做了 parity 处理、补偶了。补偶前应为 31 34。
vb 能够将一个字节的内容转换成两个对应的ascii 吗?
任何方式的帮助,都将非常感谢!
[解决办法]
分析一下,都加了30
0 0+30 30
A 11+30 41
1 1+30 31 B1
4 4+30 34 B4
[解决办法]
不补偶的:
dim n as byte, n1 as byte, n2 as byten = &H0An1 = (n \ &H10) + &H30n2 = (n mod &H10) + &H30debug.print hex(n1), hex(n2)
[解决办法]
Public Function HexToAsc(bytHex As Byte) As String Dim i As Long i = bytHex \ 16 If i > 9 Then HexToAsc = Chr(i - 10 + &H41) Else HexToAsc = Chr(i + &H30) End If i = bytHex Mod 16 If i > 9 Then HexToAsc = HexToAsc & Chr(i - 10 + &H41) Else HexToAsc = HexToAsc & Chr(i + &H30) End IfEnd FunctionPublic Function HexToAsc2(bytHex As Byte) As Byte() Dim i As Long Dim bytAsc(0 To 1) As Byte i = bytHex \ 16 If i > 9 Then bytAsc(0) = i - 10 + &H41 Else bytAsc(0) = i + &H30 End If i = bytHex Mod 16 If i > 9 Then bytAsc(1) = i - 10 + &H41 Else bytAsc(1) = i + &H30 End If HexToAsc2 = bytAscEnd FunctionPrivate Sub Command1_Click() Dim byt() As Byte byt = HexToAsc2(&HD) Print Chr(byt(0)); Chr(byt(1))End SubPrivate Sub Command2_Click() Print HexToAsc(&HD)End Sub
[解决办法]
大家注意一下:十六进制 A = 10 ,而不是 11。
楼主试一下这段代码:
Private Function ByteToHexStr(Num As Byte) As String Dim i%, strBH$ i = Num \ 16 + 48 If (i > 57) Then i = i + 7 strBH = Chr$(i) i = (Num And 15) + 48 If (i > 57) Then i = i + 7 ByteToHexStr = strBH & Chr$(i) End FunctionPrivate Sub Command1_Click() Debug.Print ByteToHexStr(&H1A) Debug.Print ByteToHexStr(&H35) Debug.Print ByteToHexStr(&HEF)End Sub'输出:' 1A' 35' EF
[解决办法]
Hex(&HA) 得到的是 "A" 而不是 "0A"。
[解决办法]
那位能用二进制给描述一下 &H0A 和 hex(&H0A)
1. &HA = 10
binary code( 0000 1010 )
2. Hex(&H0A) = "A"
binary code ( 0100 0001 )
[解决办法]
lz:你用VB做下试验
在CODE编辑窗口[code=VB]
Private Sub Command1_Click()
Dim a As Byte
a = &HA '书写按a = &H0A,换行后变为a = &HA
Debug.Print a
Debug.Print
End Sub
[/code]
立即窗口执行Command1_Click
可以看到:
10
A
前导零不显示.但内存的BYTE中必然是(0000 1010)