Public Function QpDecode(inString As String) As String Dim myB As Byte Dim myByte1 As Byte, myByte2 As Byte Dim convStr() As Byte Dim mOutByte As Byte Dim FinishPercent As Long Dim TotalB, k As Long Dim tmpByte As ByteconvStr = StrConv(inString, vbFromUnicode)TotalB = UBound(convStr) For k = 0 To TotalB myB = convStr(k) If myB = Asc("=") Then k = k + 1 myByte1 = convStr(k) If myByte1 = &HA Then '如果是回车,继续 Else '取第二个字节 k = k + 1 myByte2 = convStr(k) Call DecodeByte(myByte1, myByte2, mOutByte) If mOutByte >= 127 Then If tmpByte <> 0 Then QpDecode = QpDecode & Chr(Val("&H" & Hex(tmpByte) & Hex(mOutByte))) tmpByte = 0 Else tmpByte = mOutByte End If Else QpDecode = QpDecode & Chr(mOutByte) tmpByte = 0 End If End If Else mOutByte = myB QpDecode = QpDecode & Chr(mOutByte) End If Next End Function Private Sub DecodeByte(mInByte1 As Byte, mInByte2 As Byte, mOutByte As Byte) Dim tbyte1 As Integer, tbyte2 As Integer If mInByte1 > Asc("9") Then tbyte1 = mInByte1 - Asc("A") + 10 Else tbyte1 = mInByte1 - Asc("0") End If If mInByte2 > Asc("9") Then tbyte2 = mInByte2 - Asc("A") + 10 Else tbyte2 = mInByte2 - Asc("0") End If mOutByte = tbyte1 * 16 + tbyte2 End SubPrivate Sub EncodeByte(mInByte As Byte, mOutStr As String) If (mInByte >= 33 And mInByte <= 60) Or (mInByte >= 62 And mInByte <= 126) Then mOutStr = Chr(mInByte) Else If mInByte <= &HF Then mOutStr = "=0" & Hex(mInByte) Else mOutStr = "=" & Hex(mInByte) End If End If End SubPublic Function QpEncode(inString As String) As String Dim myB As Byte Dim convByte() As Byte Dim mOutStr As String Dim FinishPercent As Long Dim TotalB, k As LongconvByte = StrConv(inString, vbFromUnicode)TotalB = UBound(convByte) For k = 0 To TotalB myB = convByte(k) EncodeByte myB, mOutStr QpEncode = QpEncode & mOutStr Next End FunctionPrivate Sub Command1_Click() MsgBox QpDecode("=B2=E2=CA=D4=D2=BB") End SubPrivate Sub Command2_Click() MsgBox QpEncode("测试一") End Sub
笨蛋,这是你写的吗,convStr函数的实现在那里
TO simdm(阿德) :对不起,请您注意措辞!!!convStr是一个字节数组 '------定义----- Dim convStr() As Byte '------赋值----- convStr = StrConv(inString, vbFromUnicode)这些在我贴的代码中都有,这段代码确实不是我写的,但至少我知道是如何实现,请您先仔细看清楚,看明白,再发表您的言论!
Dim myB As Byte
Dim myByte1 As Byte, myByte2 As Byte
Dim convStr() As Byte
Dim mOutByte As Byte
Dim FinishPercent As Long
Dim TotalB, k As Long
Dim tmpByte As ByteconvStr = StrConv(inString, vbFromUnicode)TotalB = UBound(convStr)
For k = 0 To TotalB
myB = convStr(k)
If myB = Asc("=") Then
k = k + 1
myByte1 = convStr(k)
If myByte1 = &HA Then
'如果是回车,继续
Else
'取第二个字节
k = k + 1
myByte2 = convStr(k)
Call DecodeByte(myByte1, myByte2, mOutByte)
If mOutByte >= 127 Then
If tmpByte <> 0 Then
QpDecode = QpDecode & Chr(Val("&H" & Hex(tmpByte) & Hex(mOutByte)))
tmpByte = 0
Else
tmpByte = mOutByte
End If
Else
QpDecode = QpDecode & Chr(mOutByte)
tmpByte = 0
End If
End If
Else
mOutByte = myB
QpDecode = QpDecode & Chr(mOutByte)
End If
Next
End Function
Private Sub DecodeByte(mInByte1 As Byte, mInByte2 As Byte, mOutByte As Byte)
Dim tbyte1 As Integer, tbyte2 As Integer
If mInByte1 > Asc("9") Then
tbyte1 = mInByte1 - Asc("A") + 10
Else
tbyte1 = mInByte1 - Asc("0")
End If
If mInByte2 > Asc("9") Then
tbyte2 = mInByte2 - Asc("A") + 10
Else
tbyte2 = mInByte2 - Asc("0")
End If
mOutByte = tbyte1 * 16 + tbyte2
End SubPrivate Sub EncodeByte(mInByte As Byte, mOutStr As String)
If (mInByte >= 33 And mInByte <= 60) Or (mInByte >= 62 And mInByte <= 126) Then
mOutStr = Chr(mInByte)
Else
If mInByte <= &HF Then
mOutStr = "=0" & Hex(mInByte)
Else
mOutStr = "=" & Hex(mInByte)
End If
End If
End SubPublic Function QpEncode(inString As String) As String
Dim myB As Byte
Dim convByte() As Byte
Dim mOutStr As String
Dim FinishPercent As Long
Dim TotalB, k As LongconvByte = StrConv(inString, vbFromUnicode)TotalB = UBound(convByte)
For k = 0 To TotalB
myB = convByte(k)
EncodeByte myB, mOutStr
QpEncode = QpEncode & mOutStr
Next
End FunctionPrivate Sub Command1_Click()
MsgBox QpDecode("=B2=E2=CA=D4=D2=BB")
End SubPrivate Sub Command2_Click()
MsgBox QpEncode("测试一")
End Sub
'------定义-----
Dim convStr() As Byte
'------赋值-----
convStr = StrConv(inString, vbFromUnicode)这些在我贴的代码中都有,这段代码确实不是我写的,但至少我知道是如何实现,请您先仔细看清楚,看明白,再发表您的言论!
暴光一下:
http://expert.csdn.net/Expert/topic/2106/2106635.xml?temp=8.800685E-03
暴光一下(刚才链接错了):
http://expert.csdn.net/Expert/topic/2068/2068371.xml?temp=.8468286
走...过...路...过!鄙视一下。
----------------------------
走...过...路...过!鄙视过
这样押运点,呵呵
((
_,,---.)\__
,'. ""`.
f.: \
,-.|: ,-. ,-. Y-.
,-. f , \. /: \ . / | j
f. Y `.`. _`. ,'_ |f
|: | ) ) "` "` |'
l:. l ( ' --. j
Y: Y_,--.Y: __ (
,-.| ,'.::..):.. ,'"-'Y. Y
f:. \ ::. '"'`--` j
j:: Y-.__ __,,-'___
f;\::. | ``""""''__(""'_,.`--. ,--.
l:::::... j--. ,'.. `"' Y-'.:::)
`-..::::::_,,-' :). `--'(::.. ,j..::--(
f`"""'. . )-(:. .:::`---\:.-'Y;:::::::Y
j:::::::::.. Y: ..:::::`;_,;;;::::::j
f::;;;;;::::::. j: ...::::\;;:::_,,'
l;;::::::::: _,;: (., .....Y::."\
Y;;;::::_,-';::.. |:::. Y
l;;;;;:::`-;;;::.... j;;::.|
`;;;;;;;;;:);;;;:::::... /\;;;;:j
"`------'-.;;;;::::::::...._,-'" `---'
``"""""""""""''
楼主不讲礼貌,就算了,可能他还小不懂事。大伙还是看看程序吧。
代码大概扫了一下,具体实现想来cooly贴出来应该是没错。
我觉得,这个代码是不是效率会比较低,逐字节循环中用了转换函数,和每步一次的字符串连接,这样文件稍大,就可能慢的没法用,我想可以改为前期判断缓冲区大小,然后逐字赋值。会快很多的。
qp可能主要用作双字文本的编码,可能不会很大,效率可能不是太重要。原先我作过一个base64的编解码程序,也是在这的一个网友提出这个问题。现在这段程序的速度比foxmail和outlook都快很多。
((
_,,---.)\__
,'. ""`.
f.: \
,-.|: ,-. ,-. Y-.
,-. f , \. /: \ . / | j
f. Y `.`. _`. ,'_ |f
|: | ) ) "` "` |'
l:. l ( ' --. j
Y: Y_,--.Y: __ (
,-.| ,'.::..):.. ,'"-'Y. Y
f:. \ ::. '"'`--` j
j:: Y-.__ __,,-'___
f;\::. | ``""""''__(""'_,.`--. ,--.
l:::::... j--. ,'.. `"' Y-'.:::)
`-..::::::_,,-' :). `--'(::.. ,j..::--(
f`"""'. . )-(:. .:::`---\:.-'Y;:::::::Y
j:::::::::.. Y: ..:::::`;_,;;;::::::j
f::;;;;;::::::. j: ...::::\;;:::_,,'
l;;::::::::: _,;: (., .....Y::."\
Y;;;::::_,-';::.. |:::. Y
l;;;;;:::`-;;;::.... j;;::.|
`;;;;;;;;;:);;;;:::::... /\;;;;:j
"`------'-.;;;;::::::::...._,-'" `---'
``"""""""""""''