自己尝试了接近一个小时,硬是转不出来,同事也没有会 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;
}
{
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#函数调用的一个问题
- 求比较通用的 车牌号 正则表达式
- winform checkbox 怎样才能disable?就是不能选择不是readonly那种,选都不能选有没有
- c# 修改<img>标签的 src= 高手指点
- 思归等大侠请进,帮我看看这个问题怎么解决
- Microsoft Visual SourceSafe 最高版本是不是6.0?微软的这个东西好像一直没有新版本?
- WPF,控件的访问限制怎没有了?
- c#中文件改名用什么? 如果目标文件名 已经存在会怎么样?
- C#中如何在菜单中添加快捷键
- 代理服务器
- 谁能给个完整的BeginReceiveFrom 方法的例子,谢谢
- NHibernate访问子类为什么总是出现"访问被拒绝":父类名
{
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 * =>string
chat =>char
unsined char=> byte