标题:小弟求教高手 十六进制求和的低两位为校验码
只看楼主
安宏锋
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-7-15
结帖率:0
已结贴  问题点数:20 回复次数:1 
小弟求教高手 十六进制求和的低两位为校验码
求程序 帮帮忙
要求将0x30,0x31,0x30,0x31,0x34,0x30,0x32,0x03这几个数求和 取低两位为校验码
和校验值=
30H+31H+30H+31H+34H +30H+32H+03H=15B,取5B    结果是asc码 输出为0x35,0x42 就好了 求好心人帮忙
搜索更多相关主题的帖子: 十六进制 校验 
2010-07-15 15:00
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:20 
#include<stdio.h>
#include<string.h>
int main()
{
char a[20],b[5];
int i,result = 0,k = 1,j = 0;
printf("输入一个二进制数:\n");
gets(a);
for(i = strlen(a)-1;i >= 0;i --)
{
if(a == '1') result += 1 << (k-1); //如果是1,用1*位权
if(k == 4 || i == 0) //每四位计算一次结果(result)。
//如果到了最高位(i==0)不足四位(比如100 0000),也计算
{
switch(result)
{
case 10: b[j++]='A';break; //大于等于十转化成字母
case 11: b[j++]='B';break;
case 12: b[j++]='C';break;
case 13: b[j++]='D';break;
case 14: b[j++]='E';break;
case 15: b[j++]='F';break;
default: b[j++]=result + '0';break;
}
result = 0; //结果清零
k = 0; //表示位权的K清零
}
k ++; // 初始位权为1
}
b[j] = '\0';
printf("结果是:\n");
for(i = strlen(b)-1;i >= 0;i --)
printf("%c",b);
printf("\n");
return 0;
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-18 17:29



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313058-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.367989 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved