c ++从16字节char数组中创建4个整数

时间:2014-06-17 08:40:31

标签: c++ pointers integer binaryfiles

这是我的问题

我已经从二进制文件中读取二进制序列到char数组中。我的二进制文件比我的缓冲区大得多,所以我已经迭代地阅读了它。

我从文件中读取了16个字节并将其存储到char * myPointer指针中。现在从myPointer我需要创建4个整数,我不知道我该怎么做。有人帮我吗?

注意:如果您有更好的解决方案,我不必将它存储到char数组中

2 个答案:

答案 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。即文件结构(哪种数据类型写在哪里)。