Public Declare Function GetPosInfo Lib "ComDll.dll" (ByVal psCardData As String, nTimeOut As Integer) As Integer这是个读卡器的读卡函数,用这个函数来读取出一串字符串例如读出字符串是"广东省解放路120号     51000010A95B120D"
"地址:广东省解放路120号     "
"区号:510000"
"检验码:10A95B120D"我是用下面那个函数来截取的
问题就是.有时截取出来的字符变成"区号:000001"  ,"检验码:0A95B120D"
因为读卡器供应商说他那个读出来是ascii码.所以我怀疑是不是我的读取程序的编码问题
或者麻烦各位帮忙看下我的这个函数有没有问题?
或者是其它的问题Public Function getCardSubString(strCard As String, startPosition As Integer, strlength As Integer) As String
    Dim byteAry() As Byte
    Dim temAry() As Byte
    Dim str As String
    Dim I As Integer
    Dim J As Integer
    
    byteAry = Space$(256)
    temAry = Space$(strlength / 2 + 1)
    byteAry = StrConv(strCard, vbFromUnicode)
    
    J = 0
    For I = startPosition To startPosition + strlength - 1
        temAry(J) = byteAry(I)
        J = J + 1
    Next I

解决方案 »

  1.   

    startPosition和strlength这两个参数给的不对呗,你代码没贴完整鬼老二才知道是什么问题!
      

  2.   


    是指同样的参数例如第一次getCardSubString(pscarddata,8,6)="510000"
    getCardSubString(pscarddata,14,10)="10A95B120D"第二次就getCardSubString(pscarddata,8,6)="100000"
    getCardSubString(pscarddata,14,10="0A95B120D"
      

  3.   


    反正你最后10位是校验码,校验码前面的6位是区号,区号前面是地址,为什么不直接用right(pscarddata,10)取校验码,left(right(pscarddata,16),6)取区号,left(pscarddata,len(pscarddata)-16)取得地址
      

  4.   

    Public Function getCardSubString(strCard As String, _
                                     startPosition As Integer, _
                                     strlength As Integer _
                                    ) As String
        Dim sSrc As String
        Dim sSub As String
        
        sSrc = StrConv(strCard, vbFromUnicode)
        sSub = MidB$(sSrc, startPosition + 1, strlength)
        getCardSubString = StrConv(sSub, vbUnicode)
    End Function
      

  5.   

    Dim sSrc As String
        Dim sSub As String
        
    字符串声明能不能这样写--->dim sSrc,sSub As Stringhehe ..