输入: 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; }

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信