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

c++ creating 4 integer from the 16 byte char array

本文关键字:创建 4个 整数 数组 字符 字节 c++      更新时间:2023-10-16

我的问题是

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

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

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

如果存储数据的端序与系统的端序相同,则可以使用以下代码在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,但由您决定何时需要

读取二进制文件:

#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
}

显然,您需要确切地知道如何解释数据,即文件结构(在哪里写入哪种数据类型)。