dim sellkeytemp as string
dim sellkey as byte
sellkeytemp="E38BDFE7A1BB2DEBF9FB8BE8232C7C0C"    '这是从其它函数得到
sellkey = StrConv(sellkeytemp, vbFromUnicode)这样得到的sellkey(0)="E"   sellkey(1)="3"    sellkey(2)="8"
怎么样才得到sellkey(0)="E3"  sellkey(1)="8B"

解决方案 »

  1.   

    通常都是自己编写小个函数的,如下:上面是你的代码。Dim nByte() As BytePrivate Sub Form_Load()
    Dim sellkeytemp As String
    'Dim sellkey As Byte
    sellkeytemp = "E38BDFE7A1BB2DEBF9FB8BE8232C7C0C"  '这是从其它函数得到
    'sellkey = StrConv(sellkeytemp, vbFromUnicode)    StrToByte sellkeytemp
        Dim i As Integer
        For i = 1 To Len(sellkeytemp) \ 2
            Debug.Print nByte(i)
        Next
    End Sub
    Sub StrToByte(ccStr As String)
        Dim i As Integer, k As Integer
        k = Len(ccStr) \ 2
        ReDim nByte(k)
        For i = 1 To k
            nByte(i) = Val("&H" & Mid(ccStr, i, 2))
        Next
    End Sub
      

  2.   


    一个Byte是放不下两个字符的。
    如果你要存放的是 Hex 值,可以这样做:Private Sub Command1_Click()
        
        Dim i           As Long
        Dim bData()     As Byte
        Dim sData       As String
        
        sData = "E38BDFE7A1BB2DEBF9FB8BE8232C7C0C"
        
        ReDim bData(0 To Len(sData) / 2 - 1)
        
        For i = 1 To Len(sData) Step 2
            
            bData(i \ 2) = CByte("&H" & Mid$(sData, i, 2))
            
        Next
        
    End Sub
      

  3.   

    LZ,你定义dim sellkey() as byte ,不可能得到sellkey(0)="E"这种形式,改成String
    根据楼上“阿花fj182”修改Private Sub Form_Load()
        Dim i          As Long
        Dim bData()    As String      '改成String类型
        Dim sData      As String    sData = "E38BDFE7A1BB2DEBF9FB8BE8232C7C0C"    ReDim bData(0 To Len(sData) / 2 - 1)    For i = 1 To Len(sData) Step 2        bData(i \ 2) = Mid(sData, i, 2)
            '十六进制形式用下面的
            'bData(i \ 2) = "&H" & Mid$(sData, i, 2)
            Debug.Print "bData(" & i \ 2 & ")=" & bData(i \ 2)
        Next
    Sub
      

  4.   

    还是没有解决,虽然楼上提供的方法可以转成我要的形式的数组,,这个数组是要给C++ dll库中送入,然后返回一个进制的数
    '卡号
    bytCardNo(0) = &H0 'Mid(databuff32, 1, 2)
    bytCardNo(1) = &H0 'Mid(databuff32, 3, 2)
    bytCardNo(2) = &H0 'Mid(databuff32, 5, 3)
    bytCardNo(3) = &H0 'Mid(databuff32, 7, 2)
    bytCardNo(4) = &H0 ' Mid(databuff32, 9, 2)
    bytCardNo(5) = &H0 ' Mid(databuff32, 11, 2)
    bytCardNo(6) = &H0 'Mid(databuff32, 13, 2)
    bytCardNo(7) = &H98 'Mid(databuff32, 15, 2)
    dst = Load_Key(mastkey(i))    '从PSAM卡中取密钥For i = 0 To 95
        mastkeytemp = mastkeytemp & Left(hex(mastkey(i)), 2)
    Next i
    Debug.Print mastkeytempFor i = 32 To 95
        buykeytemp = buykeytemp & Left(Chr(mastkey(i)), 2)
     Next iFor i = 64 To 95
        sellkeytemp = sellkeytemp & Left(Chr(mastkey(i)), 2)
    Next iDim strsellkey As String
    'strsellkey = "E38BDFE7A1BB2DEBF9FB8BE8232C7C0C"
    '用以下直接赋值送入DLL中后可得到正确结果
    'sellkey(0) = &HE3
    'sellkey(1) = &H8B
    'sellkey(2) = &HDF
    'sellkey(3) = &HE7
    'sellkey(4) = &HA1
    'sellkey(5) = &HBB
    'sellkey(6) = &H2D
    'sellkey(7) = &HEB
    'sellkey(8) = &HF9
    'sellkey(9) = &HFB
    'sellkey(10) = &H8B
    'sellkey(11) = &HE8
    'sellkey(12) = &H23
    'sellkey(13) = &H2C
    'sellkey(14) = &H7C
    'sellkey(15) = &HCsellkeytemp = Mid(mastkeytemp, 65, 32)     '密钥临时
    '通过这种方法转换出来的数组送入DLL后,返回结果不对
    StrToByte sellkeytemp
       ' Dim i As Integer
        For i = 0 To Len(sellkeytemp) \ 2 - 1
            Debug.Print nByte(i)
        Next
    Call doubleEncrypt(bytCardNo(0), bytout(0), nByte(0))
    'Call doubleEncrypt(bytCardNo(0), bytout(0), sellkey(0))  '这个是可得到正确结果的
    Debug.Print Hex(bytout(0))
    Debug.Print Hex(bytout(1))
    Debug.Print Hex(bytout(2))For i = 0 To 15
        strResult = strResult & Hex(bytout(i))
        'strresult=strresult
    Next i
    Dim strbykey As String
    hexkey = Left(strResult, 12)Sub StrToByte(ccStr As String)
        Dim k As Integer
        k = Len(ccStr) \ 2
        ReDim nByte(k)
        For i = 0 To k - 1
            nByte(i) = Val("&H" & Mid(ccStr, i + 1, 2))
        Next
    End Sub
      

  5.   

    用这个方法得到的是sellkey(0)=&HE3  SELLKEY(1)=&H38   SELLKEY(2)=&H8B