这是我的问题
我已经从二进制文件中读取二进制序列到char数组中。我的二进制文件比我的缓冲区大得多,所以我已经迭代地阅读了它。
我从文件中读取了16个字节并将其存储到char * myPointer
指针中。现在从myPointer我需要创建4个整数,我不知道我该怎么做。有人帮我吗?
注意:如果您有更好的解决方案,我不必将它存储到char数组中
答案 0 :(得分:0)
如果存储数据的endianess与系统的endianess相同,那么您可以使用以下代码在int
中存储读取数据:
int ints[4];
char bytes[4*sizeof(int)];
memcpy( ints, bytes, sizeof( ints ) );
如果您在输入二进制文件和计算机上有不同的字节顺序,则可能需要交换这些位:
template< class T>
void changeEndianess( T & input)
{
char temp[ sizeof( T ) ];
for( int j=sizeof( T )-1; j>=0; --j )
temp[sizeof(T)-j-1] = *((char *)&input+j);
memcpy( &input, temp, sizeof( T ) );
}
// and somewhere in your program:
for( size_t i=0; i<sizeof( ints ); ++i )
{
changeEndianess<int>( ints[i] );
}
要使用short
将上述代码中的所有int
更改为short
,但由您自行决定何时需要。
答案 1 :(得分:0)
从二进制文件中读取:
#include <fstream>
#include <assert.h>
void main()
{
std::ifstream file("file.dat", std::ios_base::binary);
assert(file.is_open());
int i = 0;
file.read((void*)&i, sizeof(i));
short s = 0;
file.read((void*)&s, sizeof(s));
... // And so on
}
显然,您需要确切地知道如何解释数据,i。即文件结构(哪种数据类型写在哪里)。