读书人

帮忙将C代码转成C#该怎么解决

发布时间: 2012-05-29 12:16:00 作者: rapoo

帮忙将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 + '3');            sSim[2] = (char)(Bit23 % 10 + '0');            sSim[11] = '0';            return 1;        } 


[解决办法]
楼上的char应为byte。

[解决办法]

探讨

楼上的char应为byte。

[解决办法]
C# code
主要是平台数据类型和托管数据类型的对应:char * =>stringchat =>charunsined char=> byte 

读书人网 >C#

热点推荐