如果把文件中的每个字符都转成两个字节的?(UNICODE一律使用两个字节表示一个字符)

解决方案 »

  1.   

    Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Long
    Const CP_UTF8 = 65001Private Function ChangeCharToUnion(src As String, destBuff As String) As Long
        If Len(destBuff) = 0 Then
            Exit Function
        End If
        
        Dim result As Long
        result = MultiByteToWideChar(CP_UTF8, 0, src, Len(src), destBuff, Len(destBuff))
        If result < 0 Then
            destBuff = ""
        Else
            destBuff = Left(destBuff, result * 2)
        End If
        
        ChangeCharToUnion = result
    End FunctionPrivate Sub Command1_Click()
        
        Dim buff As String * 255
        ChangeCharToUnion Text1.Text, buff
        
        Text2 = buff
        
    End Sub
      

  2.   

    谢谢各位的关注,,
    到这里帮我看看好吗?
    http://expert.csdn.net/Expert/topic/2650/2650449.xml?temp=.1470148
      

  3.   

    变量=StrConv(待转换字符串,vbUnicode)
      

  4.   

    直接用函数STRCONV不行
    因为我是要用于winsock从PC发到PAD的(EVB),这个可能大家也没得测试,
    希望大家帮忙提点建议,,
    到这看看好吗?谢谢
    http://expert.csdn.net/Expert/topic/2650/2650449.xml?temp=.1470148
      

  5.   

    'VB6的傳送
    Private Sub cmd_send_Click()
      Dim wsSend, sSend
      sSend = txt_send.Text
      wsSend = StrConv(sSend, vbUnicode)
      wsk_client.SendData wsSend
    End Sub當在VB6按下傳送按鈕時,將字串轉成UniCode,且傳送出去!
    eVB的接收端
    Private Sub WinSock1_DataArrival(ByVal bytesTotal As Long)
        Dim data As String
        Dim char1, char2
        Dim i As Integer
        Dim bData() As Byte   '是Byte陣列喔!
        
        WinSock1.GetData bData, vbByte + vbArray
         data = ""
       For i = 0 To bytesTotal - 1 Step 2
         char1 = bData(i)
         char2 = bData(i + 1)
         If char2 = 0 Then
           data = data + Chr(char1)
         Else
           data = data + ChrB(char1) + ChrB(char2)
         End If     
       Next
       txt_get.Text = data
    End Sub既然,VB6送出來的是UniCode,那在eVB收到的字串就是UniCode,那直接引用不就得了?不幸的,並不能直接的引用!首先,要用Byte列陣來接收字元。Unicode,是用兩個Byte來表示一個字,如果是英文字,則第二個Byte為"0"(我是這樣認為啦!),所以,必須用上列的程式,把Unicode給串起來!
    'eVB的傳送端
    Private Sub cmd_send_Click()
        'WinSock1.SendData txt_send.Text
        Dim i, j
        Dim bData() As Byte
        Dim strSend, wSend
        'j = 0
        wSend = txt_send.Text
        ReDim bData(Len(txt_send.Text) * 2 - 1)
        For i = 0 To Len(txt_send.Text) - 1
            bData(j) = AscB(MidB(Mid(txt_send.Text, i + 1, 1), 1, 1))
            j = j + 1
            bData(j) = AscB(MidB(Mid(txt_send.Text, i + 1, 1), 2, 1))
            j = j + 1
        Next i
        WinSock1.SendData bData
    End Sub那eVB在傳送的時候,只要傳送UniCode就行了吧?很抱歉,必須先將要傳送的字轉成16進位,並且要把一個"字"拆成兩個Byte。然後把UniCode的碼放入Byte列陣中,再傳送出去!
    'VB6接收端
    Private Sub wsk_client_DataArrival(ByVal bytesTotal As Long)
      Dim data, adata As String
      Dim uStr
      Dim i, iPrev
      Dim char1
      Dim bData() As Byte   '是Byte陣列喔!
      
      wsk_client.GetData bData, vbByte + vbArray
      
      If G_Arrival_End Then
        ReDim G_Arrival_Data(bytesTotal)  '這是第一次收到的
        For i = 0 To bytesTotal - 1
           G_Arrival_Data(i) = bData(i)
        Next i
        G_Arrival_End = False
      Else
        iPrev = UBound(G_Arrival_Data)
        ReDim Preserve G_Arrival_Data(bytesTotal + iPrev - 1)    For i = 0 To bytesTotal - 1
           G_Arrival_Data(i + iPrev) = bData(i)
        Next i
        G_Arrival_End = True
        data = ""
       For i = 0 To UBound(G_Arrival_Data) Step 2
            data = data + ChrB(G_Arrival_Data(i)) + ChrB(G_Arrival_Data(i + 1))        
        Next i
        txt_receive.Text = txt_receive.Text & data
      End IfEnd Sub