VB如何实现字符串(包括大小写字母、数字)与二进制的相互转换?
以下是我的代码,我现在只能把小写字母转为二进制并且可以再转换回来,数字和大写字母转换后就不对了,谁知道如何解决这个问题?
'=====================================================================================
'字符串转成二进制
Public Function StringToBinary(ByVal VarString As String) As Variant
Dim strBin As Variant
Dim varchar As String
Dim varasc As Long
Dim varlow, varhigh
Dim i As Long
strBin = ""
For i = 1 To Len(VarString)
varchar = Mid(VarString, i, 1)
varasc = Asc(varchar)
If varasc < 0 Then
varasc = varasc + 65535
End If
If varasc > 255 Then
varlow = Left(Hex(Asc(varchar)), 2)
varhigh = Right(Hex(Asc(varchar)), 2)
strBin = strBin & ChrB("&H" & varlow) & ChrB("&H" & varhigh)
Else
strBin = strBin & ChrB(AscB(varchar))
End If
Next
StringToBinary = strBin
End Function
'========================================================================
'二进制转换为字符串
Public Function BinaryToString(ByVal BinaryStr As Variant) As String
Dim lnglen As Long
Dim tmpBin As Variant
Dim strC As String
Dim skipflag As Long
Dim i As Long
skipflag = 0
strC = ""
If Not IsNull(BinaryStr) Then
lnglen = LenB(BinaryStr)
For i = 1 To lnglen
If skipflag = 0 Then
tmpBin = MidB(BinaryStr, i, 1)
If AscB(tmpBin) > 127 Then
strC = strC & Chr(AscW(MidB(BinaryStr, i + 1, 1) & tmpBin))
skipflag = 1
Else
strC = strC & Chr(AscB(tmpBin))
End If
Else
skipflag = 0
End If
Next
End If
BinaryToString = strC
End Function
问题点数:50、回复次数:6Top
1 楼province_(雍昊)回复于 2005-11-20 18:00:22 得分 20
Function getByteString(StringStr)
Dim i,char
For i=1 to Len(StringStr)
char=Mid(StringStr,i,1)
getByteString=getByteString&chrB(AscB(char))
Next
End Function
Function getString(StringBin)
Dim i
getString=""
For i=1 to LenB(StringBin)
getString=getString&chr(AscB(MidB(StringBin,i,1)))
Next
End FunctionTop
2 楼xilu_gong(禄子)回复于 2005-11-20 18:14:26 得分 0
多谢回复!可我用你的函数试了,结果和我的一样啊!Top
3 楼northwolves(狼行天下)回复于 2005-11-20 20:49:55 得分 20
不是很明白楼主的意思,试试:
Public Function StringToBinary(ByVal VarString As String) As Variant
Dim b() As Byte, strBin As String, i As Integer
b = StrConv(VarString, vbUnicode)
For i = 0 To UBound(b)
strBin = strBin & ChrB(b(i))
Next
StringToBinary = strBin
End Function
Public Function BinaryToString(ByVal BinaryStr As Variant) As String
Dim b() As Byte, i As Integer
ReDim b(1 To LenB(BinaryStr))
For i = 1 To LenB(BinaryStr)
b(i) = AscB(MidB(BinaryStr, i, 1))
Next
BinaryToString = StrConv(b, vbFromUnicode)
End FunctionTop
4 楼rainstormmaster(暴风雨 v2.0)回复于 2005-11-21 08:35:07 得分 10
我也没看明白,楼主详细说说吧:比如说有一字串"abc",转换为2进制之后应该是什么呢Top
5 楼xilu_gong(禄子)回复于 2005-11-21 10:16:28 得分 0
我试了一下northwolves的代码,还是不行。
其实我写这段代码的目的是将一种卡的卡号(卡号是以十六进制字符串表示,所以包含了字符和数字)转换为二进制,然后写入文本文件,给客户卡片的同时附带这个文本文件。在其发卡时我会读出卡号的同时读取文本文件,将二进制转为字符串,在字符串中查找有没有此卡号,如果没有就禁卡发卡。所以我的目的也就是对卡号加密,写成二进制后客户无法打开文本文件自己写入卡号。
字符串abc转换成二进制形式看到的就是乱码了(类似于:藦畽D虀E )
我的那段代码只能将小写字母来回转换Top
6 楼xilu_gong(禄子)回复于 2005-11-21 14:33:44 得分 0
问题解决了,其实代码没问题,主要是我测试时把转出的二进制放到了TextBox框里,然后将TextBox框里的二进制数据再转成字符串。可能是由于放入TextBox的数据被系统自动转为Unicode类型,所以再转就有问题了。
谢谢各位!!Top




