求一份可用的q-p编解码,谢谢!!

解决方案 »

  1.   

    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
      

  2.   

    笨蛋,这是你写的吗,convStr函数的实现在那里
      

  3.   

    TO simdm(阿德) :对不起,请您注意措辞!!!convStr是一个字节数组
    '------定义-----
    Dim convStr() As Byte
    '------赋值-----
    convStr = StrConv(inString, vbFromUnicode)这些在我贴的代码中都有,这段代码确实不是我写的,但至少我知道是如何实现,请您先仔细看清楚,看明白,再发表您的言论!
      

  4.   

    加入鄙视楼主行列
    暴光一下:
    http://expert.csdn.net/Expert/topic/2106/2106635.xml?temp=8.800685E-03
      

  5.   

    加入鄙视楼主行列
    暴光一下(刚才链接错了):
    http://expert.csdn.net/Expert/topic/2068/2068371.xml?temp=.8468286
      

  6.   

    回复人: IMHELLFIRE(不懂那么多,只懂一点点!) ( ) 信誉:100  2003-08-05 17:45:00  得分:0 
     
     
      走...过...路...过!鄙视一下。
     
    ----------------------------
     走...过...路...过!鄙视过
     
     这样押运点,呵呵
      

  7.   

                              )
                             ((
                       _,,---.)\__
                     ,'.          ""`.
                    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
            "`------'-.;;;;::::::::...._,-'"  `---'
                        ``"""""""""""''
      

  8.   

    To Cooly和大家:
    楼主不讲礼貌,就算了,可能他还小不懂事。大伙还是看看程序吧。
    代码大概扫了一下,具体实现想来cooly贴出来应该是没错。
    我觉得,这个代码是不是效率会比较低,逐字节循环中用了转换函数,和每步一次的字符串连接,这样文件稍大,就可能慢的没法用,我想可以改为前期判断缓冲区大小,然后逐字赋值。会快很多的。
    qp可能主要用作双字文本的编码,可能不会很大,效率可能不是太重要。原先我作过一个base64的编解码程序,也是在这的一个网友提出这个问题。现在这段程序的速度比foxmail和outlook都快很多。
      

  9.   

    楼主那天被人喝了酒,再加上被人扁,所以尽说胡话,连strconv函数都不知道!
      

  10.   

    强烈谴责楼主言行。顺便问一下,strconv是什么函数?谢谢解答。我的VB初级教材送人了,平时写代码只钻算法,字符串函数常用的只有len和mid$。
      

  11.   

    )
                             ((
                       _,,---.)\__
                     ,'.          ""`.
                    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
            "`------'-.;;;;::::::::...._,-'"  `---'
                        ``"""""""""""''