c语言编程作业 急求 (读取2进制文件 输出16进制)万分感谢

作业的中心主要是我们(解码)一个叫stream.gar的二进制的已有文件,这个文件里的二进制码是用格雷码来表示的,解码出来的结果要用16进制码来表示。举个例子:00111... 作业的中心主要是我们(解码)一个叫stream.gar的二进制的已有文件,这个文件里的二进制码是用格雷码来表示的,解码出来的结果要用16进制码来表示。举个例子:00111001 01110001 01101000 . . .这些都是二进制格雷码,如果将其decode(解码为16进制) 我们得到的结果会是 : 2 E 5 1 4 F ,我作业的主要任务就是以上的意思。

下面是做出来的程序运行结果:
---菜单----
1 打开一个二进制文件
2 离开
请选择 菜单选项:3

选择错误 (如果选择错误后会自动让再选,知道选择的是1或者2)

---菜单----
1打开一个二进制文件
2 离开
请选择 菜单选项:1
请输入文件名: stream.gr ( 如果不是这个的话会显示 File not found,再执行选择
程序,知道是stream.gr为止)
(如果是stream.gr的话) ---菜单---
1解码二进制文件
2 离开
请输入选项: 1
结果: 0 6 2 1 7 B 3 A 6 7 0 0 (还有如果选择的不是1或者2的话,自动循序执行直到正确为止

( 最后) ---菜单----
1打开一个二进制文件
2 离开
请选择 菜单选项 2
Bye Bye
还有一些具体要求:
1.从stream.gr文件里面读取相关的bytes;
2,分解每个bytes成为两个4-bit的格雷码;
3,解码每4-bit格雷码变为16进制数;
4,文件的大小随意定,但是小于64bytes

下面是作业中的一些提示:
格雷码G(A)
unsigned 二进制码B(A)
A代表任意的数字;
G(A) = B(A) ^ ( B(A) >> 1 );
数组【代号】 16进制数
0000 0
0001 1
0010 3
0011 2
0100 7
0101 6
0110 4
. . .
1110 B
1111 A
通过上面的表我想可以把解码function给写出来:
unsigned char decodingTable[16] = { 0, 1, 3, 2, 7, . . 0xA };
. . . .
hexValue = decodingTable[ grayValue ];
以上就是主要提示了
展开
 我来答
百度网友e59b677
2010-08-24 · TA获得超过622个赞
知道小有建树答主
回答量:926
采纳率:0%
帮助的人:245万
展开全部
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char *argv[])
{
char aa[] = "0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111";
char bb[20];
char cTmp[5];
int tmp = 0;
char* p = NULL;

memset(bb, 0x00, sizeof(bb));
memset(cTmp, 0x00, sizeof(cTmp));
p = aa;
sscanf(p, "%[0,1]", cTmp);
while(NULL != (p = strstr(p, cTmp)))
{
sprintf(bb, "%s%X", bb, strtoul(cTmp,0,2));
p = p + strlen(cTmp) + 1;
sscanf(p, "%[0,1]", cTmp);
}
printf("%s", bb);

}
大概就是这么一个思路,主要用到的就是strtoul函数。
你改成fscanf估计就好使。
lxj20062646
2010-08-24 · 超过32用户采纳过TA的回答
知道答主
回答量:115
采纳率:0%
帮助的人:75.3万
展开全部
给你个这样的思路吧,是不是二进制文件啊,不是那就是每个1或0就是一个字符,那就每读四个字符合并成一个字符就行了:

typdef usigned char uchar;
uchar decodingTabel={'0','1','3','2','7',...,'A'};//要改写成这样
uchar ch;
cfile file;
file.open(...);//
while(file.eof())
{
ch=file.getchar();//读一个八位二进制字符
uchar chh=ch>>4;//高位
uchar chl=ch&0x0F;//低位
uchar H=decodingTable[(uint)chh];
uchar L=decodingTable[(uint)chl];
cout<<H<<L<<endl;
}
代码瞎写的,看看吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我知道那不太甜7873
2010-08-24
知道答主
回答量:10
采纳率:0%
帮助的人:0
展开全部
要自己做!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式