标题:need help
只看楼主
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
Private Sub STR16to2(ByVal STR1 As String, B() As Byte)
  Dim I As Long
  
  On Error Resume Next
  
  I = Len(STR1)
  If I And 1 Then
    MsgBox "你输入的十六进制位数不对,你要注意每个十六进制数都用两个字符表示(0用00表示)"
  Else
    I = I \ 2 - 1
    ReDim B(I)
    Do While I >= 0
      B(I) = Val("&H" & Mid(STR1, I * 2 + 1, 2))
      I = I - 1
    Loop
  End If
End Sub

VB QQ群:47715789
2008-09-20 21:55
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
Private Sub STR16to4(ByVal STR1 As String, B() As Integer)
  Dim I As Long
  
  On Error Resume Next
  
  I = Len(STR1)
  If I Mod 4 Then
    MsgBox "你输入的十六进制位数不对,你要注意每个十六进制数都用四个字符表示(0用0000表示)"
  Else
    I = I \ 4 - 1
    ReDim B(I)
    Do While I >= 0
      B(I) = Val("&H" & Mid(STR1, I * 4 + 1, 4))
      I = I - 1
    Loop
  End If
End Sub

[[it] 本帖最后由 Joforn 于 2008-9-20 22:01 编辑 [/it]]

VB QQ群:47715789
2008-09-20 21:59
hangxi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-9-20
得分:0 
楼上的大牛,你的代码得出的结果是 90 , 而我需要的是 0x5A, 我需要十六进制数

[[it] 本帖最后由 hangxi 于 2008-9-20 22:34 编辑 [/it]]
2008-09-20 22:32
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
[bo][un]hangxi[/un] 在 2008-9-20 22:32 的发言:[/bo]

楼上的大牛,你的代码得出的结果是 90 , 而我需要的是 0x5A, 我需要十六进制数

在VB里 90和0x5A都是一样的。
存到计算机里都是二进制数。
2008-09-20 22:43
hangxi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-9-20
得分:0 
我知道是一样的,因为我需要把这些十六进制数发送给单片机去处理,如果用十进制的话,单片机还需要耗费资源来进行处理

例如我现在有一字符串数组 send_string[3]={"5A","6D","FD"}
我需要转换为byte 型数组 send_byte={0x5A,0x6D,0xFD}

好像不是很想象中这么简单
2008-09-20 22:51
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
[bo][un]hangxi[/un] 在 2008-9-20 22:51 的发言:[/bo]

我知道是一样的,因为我需要把这些十六进制数发送给单片机去处理,如果用十进制的话,单片机还需要耗费资源来进行处理

例如我现在有一字符串数组 send_string[3]={"5A","6D","FD"}
我需要转换为byte 型数组 send ...

你既然知道0x5A和那个90是一样的,那么你的数组也可以定义为(赋值为)
{90,...,...}
对于每个元素,你用上面的方法转换一下进制。因为输入是字符串,和Byte完全是2两码事。"5A"的每一位是一个字符,而ASCII的字符的本质还是一个Byte,所以"5A"是2个Byte组成的数组。
2008-09-21 09:01
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
[bo][un]hangxi[/un] 在 2008-9-20 22:51 的发言:[/bo]

我知道是一样的,因为我需要把这些十六进制数发送给单片机去处理,如果用十进制的话,单片机还需要耗费资源来进行处理

例如我现在有一字符串数组 send_string[3]={"5A","6D","FD"}
我需要转换为byte 型数组 send ...


我只能说你还没明白CPU是怎么处理数据的。

VB QQ群:47715789
2008-09-21 09:28
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
得分:0 
0x5A和90(十进制)在CUP中是同一个东西,不同的是我发的两个过程一个返回的是1字节的数据,也就是Byte(8Bit),而第二个是Integer(16Bit)

VB QQ群:47715789
2008-09-21 09:30
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
得分:0 
[bo][un]Joforn[/un] 在 2008-9-21 09:30 的发言:[/bo]

0x5A和90(十进制)在CUP中是同一个东西,不同的是我发的两个过程一个返回的是1字节的数据,也就是Byte(8Bit),而第二个是Integer(16Bit)

是不是Integer还要看他怎么定义的数组,他定义的似乎是bytearray
2008-09-21 09:49
hangxi
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-9-20
得分:0 
实际上关键问题是 从 十进制转化为 十六进制之后, 由 integer 变成了 string , 例如  Hex(10)="0x0A"

这样一整型数组 经过hex 转化之后就变成了 string 型的数组了, 而我希望得到 byte 型数组
2008-09-22 13:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-234194-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.826916 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved