关于c++中二进制读取的问题,为啥输出不是1

#include<iostream>#include<fstream>usingnamespacestd;intmain(){intx;ifstreamin("G:\\i... #include<iostream>
#include <fstream>
using namespace std;
int main()
{
int x;
ifstream in("G:\\in.txt",ios::binary);
if(!in)
{
cout<<"Error open file1.";
return 0;
}
in.read((char *)&x,sizeof(x));
cout<<x;
return 0;
}
in.dat 的内容是000000000 00000000 00000000 00000001
在线等 求大神啊
展开
 我来答
户霞飞gT
2013-08-27 · 超过22用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:28.4万
展开全部
in.dat里面你写上0001尝试下怎么样;呵呵000000000 00000000 00000000 00000001是字符,不是真正的二进制。真正的二进制用文件操作类写进去0x0001,并且必须是数字,不是字符串的形式;

关键点,让内存中 确实 存在的是32位,bit,是你上面的那样的格式才中。
追问
0001也不行   你说的不太懂~~~我应该怎么做??
追答
我错了,你读到的是字符0001组合出的整数值,具体为0x30 0x30 0x30 0x31 组合的值;
具体是多少要看他们是如何组合的了808464433也许是你读取的吧。
1、你需要把数字整形1写到文件中。
int _iValue=1;
fwrite(f,(char*)&_iValue,4);
2、你之前写的 000000000 00000000 00000000 00000001是字符吧

你相当于这样写
int _i0value = 48;//你看到的字符0,在内存中的二进制用整形表示值为48
int _i1Value = 49;//二进制是最实在的东西,你以不同的显示方式,看到效果也一样
fwrite(f,(char*)&_i0Value,1);
fwrite(f,(char*)&_i0Value,1);
............

fwrite(f,(char*)&_i1Value,1);
3、你想实现你的效果,你必须保证你读取到的数据的二进制到底是啥。
是实实在在的内存中的值。二进制110001你要以Assi码显示是1,以整形显示49,
以char的形式显示也是1.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuantailing
2013-08-26 · TA获得超过2545个赞
知道小有建树答主
回答量:1167
采纳率:92%
帮助的人:663万
展开全部
一般电脑环境都是Little Endian(小端),即数值低位排在低地址,高位排在高地址。所以最后的01是高位,前面的00 00 00是低位。这个数如果换成人读的二进制数,应该是00000001 00000000 00000000 00000000(如果你确定第四个字节的值是1的话)。

以下内容来自网络
-----
在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Little-Endian的定义如下:
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
追问
可是我改过之后还是不对,,输出不是1,,输出了808464432~~~~~~为什么??大神!!
追答

你在文件里输入的不会是字符0001吧!!字符'0'的值是0x30,即十进制48,可不是0啊。你用这个十六进制查看器打开文件就明白了。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
reverse_walker
2013-08-27 · TA获得超过590个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:466万
展开全部
逆向你的结果
808464432 -> in.dat前4个字节为0x30303030
得出你in.dat的ASCII前4个字符内容为"0000"
这和你描述的一致
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式