自己尝试了接近一个小时,硬是转不出来,同事也没有会 C 的,请大家有空的帮忙看看,谢谢了!int GetLHCardno(const char *Buff,char *sSim)
{
    unsigned char Bit23=0;
    int i=0;
    const char *pSim=Buff;
    sSim[0]='1';    unsigned char ucSim[4];
    memcpy(ucSim,pSim,4);    //如果第7位为1,则加上1000b
    if(ucSim[0]& 0x80)
    {
        Bit23+=(1<<3);
    }
    //去掉第7位
    ucSim[0]&=0x7f;
    if(ucSim[0]>99)
    {
        //不符合
        sSim[0]=0;
        return 0;
    }else
    {
        sSim[3]=ucSim[0]/10+'0';
        sSim[4]=ucSim[0]%10+'0';
    }
    //如果第7位为1,则加上0100b
    if(ucSim[1]& 0x80)
    {
        Bit23+=(1<<2);
    }
    ucSim[1]&=0x7f;
    if(ucSim[1]>99)
    {
        //不符合
        sSim[0]=0;
        return 0;
    }else
    {
        sSim[5]=ucSim[1]/10+'0';
        sSim[6]=ucSim[1]%10+'0';
    }
    //如果第7位为1,则加上0010b
    if(ucSim[2]& 0x80)
    {
        Bit23+=(1<<1);
    }
    ucSim[2]&=0x7f;
    if(ucSim[2]>99)
    {
        //不符合
        sSim[0]=0;
        return 0;
    }else
    {
        sSim[7]=ucSim[2]/10+'0';
        sSim[8]=ucSim[2]%10+'0';
    }
    //如果第7位为1,则加上0001b
    if(ucSim[3]& 0x80)
    {
        Bit23+=(1<<0);
    }
    ucSim[3]&=0x7f;
    if(ucSim[3]>99)
    {
        //不符合
        sSim[0]=0;
        return 0;
    }else
    {
        sSim[9]=ucSim[3]/10+'0';
        sSim[10]=ucSim[3]%10+'0';
    }    sSim[1]=Bit23/10+'3';
    sSim[2]=Bit23%10+'0';    sSim[11]=0;    return 1;
}

解决方案 »

  1.   

    自己验证一下吧        private int GetLHCardno(char[] Buff, char[] sSim)
            {
                byte Bit23 = 0;
                int i = 0;
                char[] pSim = Buff;
                sSim[0] = '1';            byte[] ucSim = new byte[4];
                Array.Copy(pSim, ucSim, 4);            //如果第7位为1,则加上1000b
                if ((ucSim[0] & 0x80) > 0)
                {
                    Bit23 += (1 << 3);
                }
                //去掉第7位
                ucSim[0] &= 0x7f;
                if (ucSim[0] > 99)
                {
                    //不符合
                    sSim[0] = '0';
                    return 0;
                }
                else
                {
                    sSim[3] = (char)(ucSim[0] / 10 + '0');
                    sSim[4] = (char)(ucSim[0] % 10 + '0');
                }
                //如果第7位为1,则加上0100b
                if ((ucSim[1] & 0x80) > 0)
                {
                    Bit23 += (1 << 2);
                }
                ucSim[1] &= 0x7f;
                if (ucSim[1] > 99)
                {
                    //不符合
                    sSim[0] = '0';
                    return 0;
                }
                else
                {
                    sSim[5] = (char)(ucSim[1] / 10 + '0');
                    sSim[6] = (char)(ucSim[1] % 10 + '0');
                }
                //如果第7位为1,则加上0010b
                if ((ucSim[2] & 0x80) > 0)
                {
                    Bit23 += (1 << 1);
                }
                ucSim[2] &= 0x7f;
                if (ucSim[2] > 99)
                {
                    //不符合
                    sSim[0] = '0';
                    return 0;
                }
                else
                {
                    sSim[7] = (char)(ucSim[2] / 10 + '0');
                    sSim[8] = (char)(ucSim[2] % 10 + '0');
                }
                //如果第7位为1,则加上0001b
                if ((ucSim[3] & 0x80) > 0)
                {
                    Bit23 += (1 << 0);
                }
                ucSim[3] &= 0x7f;
                if (ucSim[3] > 99)
                {
                    //不符合
                    sSim[0] = '0';
                    return 0;
                }
                else
                {
                    sSim[9] = (char)(ucSim[3] / 10 + '0');
                    sSim[10] = (char)(ucSim[3] % 10 + '0');
                }            sSim[1] = (char)(Bit23 / 10 + '3');
                sSim[2] = (char)(Bit23 % 10 + '0');            sSim[11] = '0';            return 1;
            }
      

  2.   


    主要是平台数据类型和托管数据类型的对应:
    char * =>string
    chat =>char
    unsined char=> byte