我用VB开发一个网络通信程序,通信对方的程序使用VC编写。但是遇到一个棘手的问题:VB使用UNICODE对字符串进行编码,而VC使用ASCII和GB2312-80进行编码。如何才能让VB使用与VC相同的编码?(我不想让VC写的程序做改动)

解决方案 »

  1.   

    StrConv 函数返回按指定类型转换的 Variant (String)。语法StrConv(string, conversion)StrConv 函数的语法有下面的命名参数:部分 说明
    string 必要参数。要转换的字符串表达式。
    conversion 必要参数:Integer。其值的和决定转换的类型。
    设置值conversion 参数的设置值为:常数 值 说明
       
    vbUpperCase 1 将字符串文字转成大写。
    vbLowerCase 2 将字符串文字转成小写。
    vbProperCase 3 将字符串中每个字的开头字母转成大写。
    vbWide* 4* 将字符串中单字节字符转成双字节字符。
    vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
    vbKatakana** 16** 将字符串中平假名字符转成片假名字符。
    vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
    vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
    vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。
    * 应用到远东地区。
    ** 仅应用到日本。注意    这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的区域使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS 中,空白的实际值会随国家/地区而不同。
      

  2.   

    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Sub StringToByte(ByVal strValue As String, _
                            b() As Byte, _
                            ByVal Index As Long, _
                            ByVal lngNum As Long)
        Dim bytData() As Byte    bytData = StrConv(strValue, vbFromUnicode)
        
        If UBound(bytData) >= 0 Then
            If UBound(bytData) >= lngNum Then
                CopyMemory b(Index), bytData(0), lngNum
            Else
                CopyMemory b(Index), bytData(0), UBound(bytData) + 1
            End If
        End If
    End Sub