伙计们,我需要从filebuffer读取6个字节并将它们存储为无符号数字。
ifstream ifs("dummy.txt", ios::binary);
unsigned __int64 result = 0;
ifs.read((char*)&result, 6);
这是对的吗?
答案 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;
}