C++ 向文件 写入 一个 二进制位
文件的本质是1和0(二进制位)的组合。所以txt和dat本质上应该一样吧。那么当打开一个TXT和DAT文件后,分别执行charc='0';outf<<c;后TXT和DAT...
文件的本质是1和0(二进制位)的组合。
所以txt和dat本质上应该一样吧。
那么当打开一个TXT和DAT文件后,分别执行
char c='0';outf<<c;后
TXT和DAT文件都会增大8个bit吗?
其实我就想知道,如何向文件中写入一个个二进制位,并且,用正确的方法(可能不是上面的语句)成功写入一个二进制位 和打开的文件类型有关吗?谢谢。 展开
所以txt和dat本质上应该一样吧。
那么当打开一个TXT和DAT文件后,分别执行
char c='0';outf<<c;后
TXT和DAT文件都会增大8个bit吗?
其实我就想知道,如何向文件中写入一个个二进制位,并且,用正确的方法(可能不是上面的语句)成功写入一个二进制位 和打开的文件类型有关吗?谢谢。 展开
2个回答
展开全部
写入二进制文件的例子网上有很多,写在这无非也是把别人的例子搬过来,
但是请楼主注意一点, 如果写入或读取的位数不是8的倍数时,要注意数据对齐问题,否则会读乱.例如在VC6中一个不齐的二进制数据读取时,可以加这三句代码限制一下
#pragma pack(push)
#pragma pack(1)
// 这里是不齐的那个二进制数据的存储定义(变量或结构)
#pragma pack(pop)
希望对您有帮助.
但是请楼主注意一点, 如果写入或读取的位数不是8的倍数时,要注意数据对齐问题,否则会读乱.例如在VC6中一个不齐的二进制数据读取时,可以加这三句代码限制一下
#pragma pack(push)
#pragma pack(1)
// 这里是不齐的那个二进制数据的存储定义(变量或结构)
#pragma pack(pop)
希望对您有帮助.
追问
我现在想向文件中输入一系列二进制位(编码的需要),每一个ASCII字符(用哈夫曼树)编码后不一定是8位,得先用个什么东西给10序列存起来,再2写入文件吗?这个东西是什么呢?
追答
你可以根据数据的特征定义一个结构啊:)
比如你说的这种情况
typedef struct BIT_{
int CodeLenth;// 用来记录编码长度
unsigned int code; // 用来记录编码本身
};
如果是用二进位存储的, 将来写入文件的时候根据结构体的两个变量截取一下就好了.
当然方法有很多了,我这个有点土是真的.
另:不好意思,好久没写代码了,上一个回答我说错了,更正一下
位数对其的时候不是以8的倍数,这个8的倍数是某个游戏脚本编译器的限制,
C的编译器一般以结构体中最长的变量所占位数为基准对齐.
特殊情况是当结构体的大小大于处理器位数时,这时会以处理器位数为基准来对齐.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询