有一个字符串,内容是16进制的数据和空格
现在我想用MID函数取出字符串中的值
然后FORMAT函数格式化字符串输出
如果字符是1位的,前面补0
类似这样:
字符串——"F 6 C 1 a"
输出效果——"0F 06 0C 01 0A"
但是现在出问题了
6 和1能自动补零,但是字母就不行
话说,我已经把字母转成16进制数值存入数组了,
再读出来显示,可就是不能补0,怎么回事啊!
程序如下:Option ExplicitPrivate Sub Command2_Click()
Dim str As String
Dim arr(4) As Long
Dim i As Integerstr = "F 6 C 10 a"
Text2.Text = ""
For i = 0 To 4
    arr(i) = CLng("&H" & Mid(str, i * 2 + 1, 1))
    Text2.Text = Text2.Text & Format(Hex(arr(i)), "00") & " "
Next i
End Sub谢谢!!!!

解决方案 »

  1.   

    Private Sub Command1_Click()Dim str As String
    Dim arr As Variant
    Dim i As Integer
    Dim tmp As Stringstr = "F 6 C 10 a b ef"Text2.Text = ""
    arr = Split(str, Chr(32))
    For i = 0 To UBound(arr)
        tmp = Hex(CLng("&H" & arr(i)))
        tmp = IIf(Len(tmp) > 1, tmp, " 0" & tmp)
        Text2.Text = Text2.Text & tmp & " "
    Next iEnd Sub
      

  2.   


    Private Sub Command1_Click()
        Dim intP As Integer
        For intP = 1 To Len(Text1.Text)
            Text2.Text = Text2.Text & Right("00" & Mid(Text1.Text, intP, 1), 2)
        Next intP
    End SubPrivate Sub Form_Load()
        Text1.Text = "3AD567"
        Text2.Text = ""
    End Sub
      

  3.   

    Option ExplicitPrivate Sub Command2_Click()
    Dim str As String
    Dim arr(4) As Long
    Dim i As Integerstr = "F 6 C 10 a"
    Text2.Text = ""
    For i = 0 To 4
      arr(i) = CLng("&H" & Mid(str, i * 2 + 1, 1))
      Text2.Text = Text2.Text & right(Format(Hex(arr(i)), "!0@@"),2) & " "
    Next i
    End Sub
      

  4.   

    谢谢楼上各位耐心回答,wowfiowow的答案最符合我的情况,十分感谢!
    不过还有两个疑问:
    1.Format函数里的 "!0@@"是什么意思?有没有相关资料?MSDN上我没有查到
      而且我用"!0@@"格式化后显示的字符一个0也没有补了……
      后来去掉了一个@,也就是用"!0@"就正常显示补0了
    2.你们为什么都用Right函数从右面取值?我刚刚用"!0@"的时候忘了写Right函数
      但是也正常显示字符串补0了,和用Right函数的效果是一样的
      这有什么差别吗?对我的程序会有什么影响吗?ps. VB新手,谢谢各位的热心+耐心回答!
      

  5.   

    写错了,是Text2.Text = Text2.Text & right(trim(Format(Hex(arr(i))), "!0@@"),2) & " "
      

  6.   

    To wowfiowow:
    !0@@是什么意思?@代表空格吗?
    可是我又用你说的"!0@@"试了一下,一样不能补0了,而且没个字符之间的空格变成了两个,去掉一个@的话,字符之间的空格就变成一个了。
    另外,只有用"!0@"的时候才能正常显示我要的结果。
    求!0@的具体含义,我只知道n个0的格式含义……
      

  7.   

    对了,还有个问题,希望看到这个帖子,精通VB的朋友帮忙解答一下
    C里的int型到底对应VB的什么数据类型?
    前两天google搜索的时候看到说对应VB的LONG型,但是我传了LONG型参数过去,报错:Type mismatch
    然后换各种数据类型都是Type mismatch
    具体情况是这样,我用C写了个DLL处理数据,然后用VB调用,显示反馈的数据
    然后VB需要传几个参数进去,DLL里定义的参数类型好像分别是
    short int 和 unsignged short,或者还有个unsigned int
    (系统突然出问题了SourceInsight打不开了,连记事本都打不开了,看不了原文件,貌似要重启)
    这几个C里的数据类型在VB里究竟对应什么类型?
    找不到合适的类型,总是Type mismatch,真恼火啊!
      

  8.   


    VC 类型对应        VB
    Int              Long
    short int        integer
    unsigned short   没有对应的类型,如果数值不大于32767可以使用Integer代替
    unsigned int     没有对应的类型,如果数值不大于2^31-1可以使用Long代替
    类型传递错误,经常会引起系统崩溃(但有时是数据错位,得不到正确结果)
      

  9.   

    唉,真是杯具啊!
    成功补零,正确显示后,不能点击textBox框修改数据了,一修改就报错
    但是没有补零,显示差一点,确可以修改数据,内存里的数据也都是正确的
    即想显示效果好看点,又想数据修改都正确,怎么这么困难啊,真是纠结!