读卡器字符串问题

hq0927 2009-09-28 12:26:51
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
...全文
162 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrammerNO1 2009-11-05
  • 打赏
  • 举报
回复
Dim sSrc As String
Dim sSub As String

字符串声明能不能这样写

--->dim sSrc,sSub As String

hehe ..
嗷嗷叫的老马 2009-09-30
  • 打赏
  • 举报
回复
帮顶..........
嗷嗷叫的老马 2009-09-30
  • 打赏
  • 举报
回复
帮顶..........
chinaboyzyq 2009-09-30
  • 打赏
  • 举报
回复
up~~~~~~~~~~~~~~~~
Tiger_Zhao 2009-09-29
  • 打赏
  • 举报
回复
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
hq0927 2009-09-29
  • 打赏
  • 举报
回复
顶起来..
贝隆 2009-09-28
  • 打赏
  • 举报
回复
是串口通信吗?是串口通信的话,建议你先用串口调试器调试好了通信在编写程序。
三楼の郎 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hq0927 的回复:]
引用 2 楼 citybird 的回复:
startPosition和strlength这两个参数给的不对呗,你代码没贴完整鬼老二才知道是什么问题!


是指同样的参数

例如第一次getCardSubString(pscarddata,8,6)="510000"
getCardSubString(pscarddata,14,10)="10A95B120D"

第二次就getCardSubString(pscarddata,8,6)="100000"
getCardSubString(pscarddata,14,10="0A95B120D"
[/Quote]

反正你最后10位是校验码,校验码前面的6位是区号,区号前面是地址,为什么不直接用right(pscarddata,10)取校验码,left(right(pscarddata,16),6)取区号,left(pscarddata,len(pscarddata)-16)取得地址
supergreenbean 2009-09-28
  • 打赏
  • 举报
回复
前面的数据头长度不一样的关系吧,1-7位是啥内容
hq0927 2009-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 citybird 的回复:]
startPosition和strlength这两个参数给的不对呗,你代码没贴完整鬼老二才知道是什么问题!
[/Quote]

是指同样的参数

例如第一次getCardSubString(pscarddata,8,6)="510000"
getCardSubString(pscarddata,14,10)="10A95B120D"

第二次就getCardSubString(pscarddata,8,6)="100000"
getCardSubString(pscarddata,14,10="0A95B120D"
三楼の郎 2009-09-28
  • 打赏
  • 举报
回复
startPosition和strlength这两个参数给的不对呗,你代码没贴完整鬼老二才知道是什么问题!

864

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧