从filebuffer读取6个字节

时间:2011-03-29 08:16:16

标签: c++ ifstream

伙计们,我需要从filebuffer读取6个字节并将它们存储为无符号数字。

ifstream ifs("dummy.txt", ios::binary);
unsigned __int64 result = 0;
ifs.read((char*)&result, 6);

这是对的吗?

1 个答案:

答案 0 :(得分:3)

首先,64位无符号整数的标准类型也是 'unsigned long long'或'uint64_t'。第二,你必须知道 您正在阅读的文件中的数据格式。我从未见过格式 它使用六个字节,所以很难猜测,但假设它是 二进制,你应该使用:

uint64_t readSix( std::istream& src )
{
    uint64_t result = checkedGet( src ) ;
    result |= checkedGet( src ) <<  8;
    result |= checkedGet( src ) << 16;
    result |= checkedGet( src ) << 24;
    result |= checkedGet( src ) << 32;
    result |= checkedGet( src ) << 48;
    return result;
}

uint64_t readSix( std::istream& src )
{
    uint64_t result = checkedGet( src ) << 48;
    result |= checkedGet( src ) << 32;
    result |= checkedGet( src ) << 24;
    result |= checkedGet( src ) << 16;
    result |= checkedGet( src ) <<  8;
    result |= checkedGet( src );
    return result;
}

取决于格式,用:

unsigned char checkedGet( std::istream& src )
{
    int result = src.get();
    if ( result == EOF )
        throw UnexpectedEof();
    return result;
}