以前我的程序要对IC卡读写,如写入AB,则AB被写入到IC卡中,读出亦是。前不久,我从网上购买了一台USB的读写器,它是在文本框中输入字符,写入该字符的十六进数到IC卡中,读出亦是该字符,与我的应用不相符。我的要求是在一个文本框中输入一个十六进制数,直接写入就可以,这就需要进行转化。先是将该十六进制数转化为十进制数,再转化为该十进制数的对应ASCII码对应的字符,写入该字符即可(动态链接库提供)。如写74,对应116,再对应t,写入t,才能将我要的74写入到IC卡中。问题是如果写入AB,则不行了。AB...171...,对应的字符是一个不可识别的东西,程序根本不能捕捉到,也就无法写入AB到IC卡了。请问这是什么问题,是我的方法不对吗?我用的函数是VAL和CHR。

解决方案 »

  1.   

    为什么写入的是74?在ic卡中写t读出来是74吗?
    将A和B分别写入行吗?
      

  2.   

    不知道怎样表述,给你一个例子吧
    asc(chr(&HAB)) = 0 ,ascB(chrB(&HAB))=171其实送chr(&HAB)应该就可以了,实在不行就送chrB(&HAB)
      

  3.   

    看来还是不明白啊,
    我要求的是字符,然后再写入,我的IC卡中才是我要的东西,
    光有ASCII码值还不够,象171对应的字符就不行比方说吧,对应字符t是可以的,,就是不知道171对应的字符是什么
      

  4.   

    我就是干IC卡读写器这一行的。
    你的话我看不明白。写入IC卡的只能是二进制,和内存里没有分别。如果写入十六进制数,用Val("&H" & strHex)转换成一个字节。
    如果写文字,用Asc(strChr)转换。读出时,用Hex()函数(数字)或Chr()函数(文字)逆转换。
      

  5.   

    理解成是二进制也可以。我可以把我的原程序发给你,可以帮忙吗?再说一下,原本我在文本框中输入AB,那么我就要求在卡中的某个字节写入是AB。
    我在文本框中写入74,那么在卡中的某个字节就应该是74。现在他提供的这个动态库是这样的,你在文本框中输入字符t,在卡中的某个字节读出才是74,离我要的东西太远,问题就在这儿。我想在卡中写入一个AB,那么在他的文本框中输入什么呢
      

  6.   

    假设你的text1里面输入了"AB" 然后要向你的IC卡里面写入十六进制的AB 也就是&HAB 也就是十进制的171是吧好啦就这样啦
        dim intInput as integer
        intInput = val("&H" & text1.text)
    这时候文本框里面输入"AB"两个字符intInput得到的就是171了。然后你在吧这个值送到你相应的IC卡存储单元就是了。
      

  7.   

    紧接上文。
    还需要把intInput转换成对应的ascii字符是吧。那就干脆用下面这一行了
    dim strInput as string
    strInput = chrW(val("&H" & text1.text))
    这下你输入“74” strinput 就是"t"了 如果你输入"AB"strinput虽然不能显示出字符,但是的确是有ascii码的。如果不行你可以用chrB 或 chr$ 代替chrW试试看应该至少有一个行的
      

  8.   

    to:chuting(机器人) 
    最好赶快把计算机中表示的二、十、八、十六进制这些基本的转换弄清楚再继续。
      

  9.   

    用Byte数祖
    别用String因为VB的String是基于UniCode的,当某个字符>=128会自动转为UniCode编码,这就照成了错误
      

  10.   

    zyl910(910:分儿,我又来了!) :您好,对于上面的问题,你可有好的解决方法
      

  11.   

    zyl910(910:分儿,我又来了!) :您说的BYTE数组的用法我不清楚,可以传个例子吗有知道的也可以帮一下忙我的MAIL:[email protected]     or  [email protected]
      

  12.   

    那要看你的“USB的读写器”的接口函数
      

  13.   

    zyl910(910:分儿,我又来了!) :
    你的EMAIL
      

  14.   

    楼主:
    你的读卡器怎么会有文本框?
    你把读卡器动态链接库的写卡函数原型贴出来,我告诉你怎么做。顺便说句不恭敬的话,你的中文还得提高。>我的要求是在一个文本框中输入一个十六进制数,直接写入就可以,这就需要进行转化。先是将该十六进制数转化为十进制数,再转化为该十进制数的对应ASCII码对应的字符,写入该字符即可(动态链接库提供)。如写74,对应116,再对应t,写入t,才能将我要的74写入到IC卡中。很费解!
      

  15.   

    输入:16进制值
    输出:ASCII字符
    对吗?好解决呀!比如在Textbox里输入"ABCDEFG1234567890"那么通过一个循环逐个获取每个字符的16进制值,再写入IC卡就行了。如果0xAB写入不正确,那只能说明你的IC卡芯片不支持不可见字符,那没有办法。
      

  16.   

    如果是标准DLL动态链接库函数,原型*Unsigned Character字符串,在VB端可以声明成字符串或Byte()数组。你的情况应该用后者。贴出你的函数声明,我帮你改。
    你干嘛老捂着不贴呢?
      

  17.   

    用C写个动态链接库,做ASCII to BCD的转换
    例如1234567890ABCDEF转换成\x12\x34\x56\x78\x90\xAB\xCD\xEF