+ -
当前位置:首页 → 问答吧 → !!!新手求救,将文件转换为二进制文件

!!!新手求救,将文件转换为二进制文件

时间:2011-12-16

来源:互联网

我刚学习的C语言,老师让把记录学生信息的Txt文件转换成二进制文件,对转换成二进制,完全没有思路,求哪位高手赐教,就怎样把字符,整数等信息转换成二进制,还有我用的是VC6.0!

作者: qianmuxiaoqi   发布时间: 2011-12-16

实际上,你老师的说法并不准确,只是习惯上那么说。

其实一切数字信息都是以二进制数存储的,因为磁盘上的一个记录点只能表示一位信息。

你老师的确切意思是:
  将文本格式(比如“15”这样的十进制文本,需要2个字节),表示为acsii码15,就只需一个字节。

这里涉及很多问题,如果有一个没有考虑,就会造成错误。

1 文本编码问题:
  需要对文本先转码再编码。一般最终编成UTF-8编码比较好。为什么要这样做呢?因为对汉字(以及不同地区语言字符)存在歧义问题,比方说,你打算将汉字“中国”写入文件,咱们假设你以GB2312的编码最终写入文件,而下一次你又想将日文“某某”写入文件,假设你用的编码是JXX(某类日文码)写入文件,那么,这里存在一个可能,就是两种编码的二进制可能是一样的,那么,你就无法分辨你存入的这行字是汉字中国还是日文的某某。所以,你要先将不是Unicode的字符转码为Unicode的数值,再把Unicode数值编码为UTF-8,最后写入文件。

2 字节序问题
  同样的一个多字节字,比如,short类型和long类型的数量,在内存中有大小边等字节序的不同,不同的硬件设置决定了内存中机器字和半字等处理机寻址存储单元的字节序。如果你想让你的文件在Internet上不同的工作站上交流,那么就必须考虑字节序问题。因为不同的工作站未必都是X86,未必都是小边字节序。你设定的文件格式要规定一种字节序,在你从文件中写入或者读出其值的时候就要进行转换,转换为本机字节序。



作者: sinservice   发布时间: 2011-12-16

你老师要你们做加密?
文件文件本来就是二进制的。看怎么理解
需求是什么?

作者: zhujian888   发布时间: 2011-12-16

我告诉你思路:
首先用一个结构体把文本数据读入,用scanf
结构体诸如
struct   student   {
char   name[20];
int   no;
}
然后再把结构体写入二进制文件,比如用fwrite
man   一下fwrite

          size_t
          fwrite(const   void   *restrict   ptr,   size_t   size,   size_t   nitems,
                  FILE   *restrict   stream);

          The   function   fwrite()   writes   nitems   objects,   each   size   bytes   long,   to   the
          stream   pointed   to   by   stream,   obtaining   them   from   the   location   given   by
          ptr.

你看多简单,如果你的学生数目是连续存储的,那么指定nitems,连循环都不用写了

作者: sniffer12345   发布时间: 2011-12-16