!!!新手求救,将文件转换为二进制文件
时间: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,未必都是小边字节序。你设定的文件格式要规定一种字节序,在你从文件中写入或者读出其值的时候就要进行转换,转换为本机字节序。
其实一切数字信息都是以二进制数存储的,因为磁盘上的一个记录点只能表示一位信息。
你老师的确切意思是:
将文本格式(比如“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,连循环都不用写了
首先用一个结构体把文本数据读入,用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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28