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"
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"
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
一个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
根据楼上“阿花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
'卡号
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