关于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
在线等 求大神啊 展开
#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
在线等 求大神啊 展开
3个回答
展开全部
in.dat里面你写上0001尝试下怎么样;呵呵000000000 00000000 00000000 00000001是字符,不是真正的二进制。真正的二进制用文件操作类写进去0x0001,并且必须是数字,不是字符串的形式;
关键点,让内存中 确实 存在的是32位,bit,是你上面的那样的格式才中。
关键点,让内存中 确实 存在的是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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般电脑环境都是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就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
以下内容来自网络
-----
在所有的介绍字节序的文章中都会提到字节序分为两类:Big-Endian和Little-Endian,引用标准的Big-Endian和Little-Endian的定义如下:
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
追问
可是我改过之后还是不对,,输出不是1,,输出了808464432~~~~~~为什么??大神!!
追答
你在文件里输入的不会是字符0001吧!!字符'0'的值是0x30,即十进制48,可不是0啊。你用这个十六进制查看器打开文件就明白了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
逆向你的结果
808464432 -> in.dat前4个字节为0x30303030
得出你in.dat的ASCII前4个字符内容为"0000"
这和你描述的一致
808464432 -> in.dat前4个字节为0x30303030
得出你in.dat的ASCII前4个字符内容为"0000"
这和你描述的一致
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询