老板让我做一个组织机构代码卡的程序,其实挺简单。其中有一处是改变ic卡密码的。原来是这样的:
         ...
char *buf=new char[256];
buf=itoa(m_NP1,buf,10);//m_NP1是一个UINT型的变量,对应一个edit框
k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)buf);//改变密码的函数。
但是这样有一个毛病,就是如果m_NP1以0开头,则buf中只是从左边第一个非0的开始计算。
后来,我改了一下。
         CString str;
GetDlgItem(IDC_EDIT_NP1)->GetWindowText(str);
         k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)str);//改变密码的函数。
这样倒是改正了以前做法的不足,可要命的是,我把IC卡的密码改为"00000000",提示修改成功,但是,再一次运行程序验证密码,如果输入"0000000"竟然提示口令不正确,用原来的密码试也不对,这可如何是好?开始验证的函数如下:
k=MemCard_VerifyPin((unsigned char *)m_Pass.GetBuffer(32));//其中m_Pass一个edit框的变量,为CString型。原来的方法(我没有改变以前),如果修改密码就没有问题。

解决方案 »

  1.   

    上面应该是(unsigned char*)&str,只是这儿我落写了,程序中是正确的。
      

  2.   

    难道你再调用一次MemCard_ChangePin修改密码不可以吗?修改之后如果看看验证还不能通过,
    那么恢复原来的代码再次修改密码再去验证
      

  3.   

    设一个断点,调一下,或TRACE出来看一下。
    肯定是你那里弄糊涂了。
      

  4.   

    我的想法是不要用int型来保存密码,干脆直接用字符型来保存不是更好嘛
      

  5.   

    保险柜打不开了吧,哈哈unsigned char *)m_Pass.GetBuffer(32));//这句话是不是有问题啊,刚刚看到一个帖子说这样有问题的,他对0有点敏感 MSDN: An LPTSTR pointer to the object’s (null-terminated) character buffer.我也不怎么懂,