日期:2014-05-18  浏览次数:20813 次

帮忙将C代码转成C#
自己尝试了接近一个小时,硬是转不出来,同事也没有会 C 的,请大家有空的帮忙看看,谢谢了!

C/C++ code


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;
}





------解决方案--------------------
自己验证一下吧
C# code

        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