c++在二进制文件中提取bit
求教:本人想用c++实现一个功能:从二进制文件中提取某些字节的数据,这些数据对于我的工作来说是可以直接使用的,求教将这些提取的bit位(以字节为单位,8bit)放入一个数...
求教:
本人想用c++实现一个功能:从二进制文件中提取某些字节的数据,这些数据对于我的工作来说是可以直接使用的,求教将这些提取的bit位(以字节为单位,8bit)放入一个数组中,每字节使用一个数组单元,转化为16进制数也可以。
例如,某二进制文件内容为:0000000100000000101100011111111111110100000101100111111010101000,希望通过c++编程得到一个数组unsigned char myarray[8] = { 0x01, 0x00, 0xB1, 0xFF, 0xF4, 0x16, 0x7E, 0xA8};
求教了。 展开
本人想用c++实现一个功能:从二进制文件中提取某些字节的数据,这些数据对于我的工作来说是可以直接使用的,求教将这些提取的bit位(以字节为单位,8bit)放入一个数组中,每字节使用一个数组单元,转化为16进制数也可以。
例如,某二进制文件内容为:0000000100000000101100011111111111110100000101100111111010101000,希望通过c++编程得到一个数组unsigned char myarray[8] = { 0x01, 0x00, 0xB1, 0xFF, 0xF4, 0x16, 0x7E, 0xA8};
求教了。 展开
3个回答
展开全部
//唯一不懂的就是 二进制文件 应该是应用程序之类的
//可是看你的范例 又好像是“文本文件里面的数据是二进制整数”
//还是写前者吧,后者比较简单
#include <iostream>
#include <fstream>
using namespace std;
/*int main()
{
ifstream in("in.txt",ios::in | ios::binary);//ios::in表示是输入文件binary表示二进制文件
in.seekg(0,ios::end);//将文件指针放在文件末尾
int n=in.tellg();//此时文件指针偏移量就是文件长度
in.seekg(0,ios::beg);
//看你的意思是 “字节”的数组,C++里面char长度就是一个字节(两个十六进制位)
char buffer[n];//
in.get(buffer,n);
//就放到buffer里面了,接下来就看你的了
system("pause");
return 0;
} */
//就是一个文件,用记事本打开里面是0000000100000000101100011111111111110100000101100111111010101000
//这样??那就看下面
int main()
{
ifstream in("in.txt");
in.seekg(0,ios::end);//将文件指针放在文件末尾
int n=in.tellg();//此时文件指针偏移量就是文件长度
//每8个二进制位就是 一个字节
n/=8;
in.seekg(0,ios::beg);
char arr[n];
char tmp;
for(int i=0;i<n;i++)
{
arr[i]='\0';//就是 arr[i]=0;
for(int j=7;j>=0;j--)
{
tmp=in.get();
tmp-='0';//此时 '0' -> 0 , '1' ->1
arr[i] |= (tmp<<j);
}
}
//处理完,输出试试
for(int i=0;i<n;i++)
cout<<hex<<showbase<<uppercase<<(short)(unsigned char)arr[i]<<' ';
cout<<endl;
system("pause");
return 0;
}
//可是看你的范例 又好像是“文本文件里面的数据是二进制整数”
//还是写前者吧,后者比较简单
#include <iostream>
#include <fstream>
using namespace std;
/*int main()
{
ifstream in("in.txt",ios::in | ios::binary);//ios::in表示是输入文件binary表示二进制文件
in.seekg(0,ios::end);//将文件指针放在文件末尾
int n=in.tellg();//此时文件指针偏移量就是文件长度
in.seekg(0,ios::beg);
//看你的意思是 “字节”的数组,C++里面char长度就是一个字节(两个十六进制位)
char buffer[n];//
in.get(buffer,n);
//就放到buffer里面了,接下来就看你的了
system("pause");
return 0;
} */
//就是一个文件,用记事本打开里面是0000000100000000101100011111111111110100000101100111111010101000
//这样??那就看下面
int main()
{
ifstream in("in.txt");
in.seekg(0,ios::end);//将文件指针放在文件末尾
int n=in.tellg();//此时文件指针偏移量就是文件长度
//每8个二进制位就是 一个字节
n/=8;
in.seekg(0,ios::beg);
char arr[n];
char tmp;
for(int i=0;i<n;i++)
{
arr[i]='\0';//就是 arr[i]=0;
for(int j=7;j>=0;j--)
{
tmp=in.get();
tmp-='0';//此时 '0' -> 0 , '1' ->1
arr[i] |= (tmp<<j);
}
}
//处理完,输出试试
for(int i=0;i<n;i++)
cout<<hex<<showbase<<uppercase<<(short)(unsigned char)arr[i]<<' ';
cout<<endl;
system("pause");
return 0;
}
展开全部
二进制文件里的内容本身就是按字节存放的,你直接读取就可以了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
太专业了。。
其实任何编程语言,包括cpu语言都是为人服务的。就像电脑也是为人服务的。你弄那么专业,没什么意义。如果大家都能看懂,社会就真能进步了。
其实任何编程语言,包括cpu语言都是为人服务的。就像电脑也是为人服务的。你弄那么专业,没什么意义。如果大家都能看懂,社会就真能进步了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询