这个问题,在网上好找了半天,但说实在话,不得不说,现在的程序员,脑子都僵化了。
一个能解决的也没有。
这还不说,多数人指出应当两边都用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的,真心建议现在的程序员,事事还是要踏实。