这个问题,在网上好找了半天,但说实在话,不得不说,现在的程序员,脑子都僵化了。
一个能解决的也没有。
这还不说,多数人指出应当两边都用UNICODE,不要用ASC 2码之类的。我想说,这些是人家问的吗?不懂就是不懂,要是我就这样,何必不懂还要瞎JB指挥?
但我要说,这正是知其然不知其所以然,正确的回答,永远是先解释完提出问题的人,然后解决之。
然后,如果你愿意画蛇添足,再加上自己的想法。不想多说了,正确的代码我放在这里:
'================================================================='
'@ purpose: '将byte数据转换成string
'@ input: i 一个long型变量
'@ param: ByRef byteArr() - Byte :被转换数组
'@ param: arrLen -long : 被转换数组的长度
'@ param output: none
'@ return : 字符串
'@ ref global value:
'@ create date: 2003-09-
'@ author: 宋薇
'@ appendix: 可以处理中文
'@ example: tempStr = bytesToString(structVar.u8EquipmentId, OM_ASN1_DISPLAYSTRING_MAX_LENGTH)
'================================================================='
Public Function bytesToString(ByRef byteArr() As Byte, ByRef ArrLen As Integer, Optional ByRef ArrBegin As Integer = 0) As String
On Error GoTo ErrExcuted
'确保长度
System.Diagnostics.Debug.Assert((UBound(byteArr) - LBound(byteArr) - ArrBegin + 1) >= ArrLen, "")
Dim arrId As Integer
Dim relStr As String
Dim tmp As Integer
For arrId = ArrBegin To ArrBegin + ArrLen - 1
If byteArr(arrId) > 0 Then
'change by haoyujie 2004-09-22
If byteArr(arrId) <= 128 Then '对于普通字符,直接转换
relStr = relStr & Chr(byteArr(arrId))
Else '与下一元素组合起来是一个汉字
tmp = 256.0# * byteArr(arrId) + byteArr(arrId + 1)
relStr = relStr & Chr(tmp)
arrId = arrId + 1
End If
Else '如果遇到'\0'
Exit For
End If
Next
bytesToString = relStr
Exit Function
ErrExcuted:
DefaultErrorExcute()
End Function
End Module
这代码,以前是这个人写的,我给加上了注释,原来是VB6写的,我转成了目前的vb.net
至于不会用vb和vb.net的,真心建议现在的程序员,事事还是要踏实。