输入:
3
0x62 0x80 0x00
2
4
5
///
输出:
6
5
上面3表示连续输入3个 十六进制:0x62 0x80 0x00 二进制为 01100010 1000000 00000000
2表示连续输入两个数:4,5。即先取上面二进制的前四个,转为整数0110即为6,00101即为5
#include<stdio.h>
int main(){
char temp[10000];
int l=1,r=0,ii,i,j=1,k=1,n,m,mm,p,tt[999],aa[6],cul=0;
int ss;
scanf("%d",&n);
while(n--){
scanf("%x",&ss);
for (i = 0; i < 8; ++i) //输入的同时将十六进制转为二进制
{
tt[8*j - 1 - i] = ss % 2; //因为是十六进制输入,刚好可以移位取bit
ss /= 2;
}
j++; //保证输入的每一个十六进制均成为8位的二进制
}
//for(i=0;i<24;i++){
// printf("%d",tt[i]);
//}
scanf("%d",&m); //输入截取数量
mm=m;
aa[0]=0;
while(m--){
scanf("%d",&p); //依次输入截取位数
aa[k]=p;
k++;
}
for(i=0;i<mm;i++){
for((ii=aa[i+1]+cul-1);ii>=cul;ii--){
r=r+tt[ii]*l; //二进制转十进制
l=l*2;
}
cul=cul+aa[i+1];
printf("%d\n",r);
l=1; //归零
r=0;
}
return 0;
}