假设一个SERVER.EXE工作在UNICODE的语言下。比如英语.
CLIENT向SERVER发一个字符"1"
server hex后接受到的是31 1个字符
但是server.exe工作在中文下接受到的就是 33 31
2个字符.有没有办法让server.exe 工作在中文并且接收到正确的数据?或者是我的hextostr有问题.
我贴出来。大家帮我出出注意
Public Function Hex2Chr(ByVal HexStr As String)
Dim sArr() As String
Dim sArr2() As String
Dim i As Long
Dim X As Long
Dim cal1  As String
Dim cal2 As String
sArr() = Split(LTrim(HexStr), " ")
For i = 0 To UBound(sArr())
cal1 = cal1 & " " & HexToDec(sArr(i))
Next isArr2() = Split(LTrim(cal1), " ")
For X = 0 To UBound(sArr2())
cal2 = cal2 & ChrW(sArr2(X))
Next X
Hex2Chr = cal2
End Function
Public Function Chr2Hex(ByVal chr As String) As Variant
Dim i As Integer
Dim b As Integer
Dim c As Integer
Dim varR As String
Dim d As Variant
Do Until i = Len(chr)
c = i + 1
b = i - 2
If b <= 0 Then b = 1
    d = hex$(AscW(Mid(chr, c, 1)))
    If Len(d) = 1 Then d = "0" & dvarR = varR & " " & d
i = i + 1
Loop
Chr2Hex = LTrim(varR)
End Function

解决方案 »

  1.   

    client 无代码....怎样解决?
      

  2.   

    似乎问题是怎样让WINSOCK不在发送数据是把数据给ANSI了。
      

  3.   

    双方都采用统一的字符集.(用MBCS或UNICODE)
    WideCharToMultiByte  :UNICODE --> MBCS
    MultiByteToWideChar  : MBCS    --> UNICODE/////////
    顺便提一下,你好象是用的是VB,字符串是UNICODE形式的.
    字符串可以直接赋值给字节数组,你不需其它转换.
    如:
    dim bytArray() as byte
    dim strMessage as string
    strMessage = "123测试";
    bytArray = strMessage
    下面是bytArray的结果
    bytArray[0] = 49  //1的ASCII低字节值.
    bytArray[1] = 0   //1的ASCII高字节值.在内存中x86系统计算机是先低字节,后高字节.
    bytArray[2] = 50
    bytArray[3] = 0
    bytArray[4] = 51
    bytArray[5] = 0
    bytArray[6] = 75
    bytArray[7] = 109
    bytArray[8] = 213
    bytArray[9] = 309
      

  4.   

    老大.克户端没有代码。 所以不能改...必须在服务器端解决.用API发送可以吗?
      

  5.   

    没有人回答一下?或者给个好的hex to chr 和chr to hex啊!分不够可以在加.在开新帖都可以.
      

  6.   

    如freebird_top(自由鸟) 所说,你把接收到的byte数组直接赋给一个字符串变量就可以了吧