2012-06-14 81 views
1

基本上我想要做的是读取一个二进制文件,并在地址处提取4个连续值。 8000。例如,4个数字是89 ab cd ef。我想读取这些值并将它们存储到缓冲区中,然后将缓冲区转换为int类型。我曾尝试以下方法:C++。将二进制文件读入缓冲区后,如何以十六进制显示缓冲区?

ifstream *pF = new ifstream(); 
buffer = new char[4]; 
memset(buffer, 0, 4); 
pF->read(buffer, 4); 

当我试图

cout << buffer << endl; 

什么也没有发生,我保证,有在这个位置是值(我可以查看十六进制查看器的二进制文件)。任何人都可以告诉我将缓冲区转换为int类型并正确显示它的方法吗?谢谢。

+0

我假设你省略移动文件指针 – rerun

+0

我不完全确定你的意思,但是当我尝试'tellout();'时,指针实际上移动了4个点。所以文件点正在移动。 –

回答

2

更新

int number = buffer[0]; 
for (int i = 0; i < 4; ++i) 
{ 
    number <<= 8; 
    number |= buffer[i]; 
} 

这也取决于小尾数和位尾数符号。如果用其他方式撰写你的号码,你可以使用number |= buffer[3 - i]

而且为了显示六角诠释你可以使用

#include <iomanip> 
cout << hex << number; 
+0

是的,对不起,起初我误解了这个问题。请参阅已更新的答案 – Ribtoks

+0

您的代码不起作用,但我的想法是使用按位运算来提取缓冲区的每个元素。我可以从这里拿走,谢谢。 –

+0

@ return0抱歉有错误。我更新了代码。现在它运行良好,我已经编译并在本地处理它 – Ribtoks

相关问题