C++ 从缓冲区C+中获取值+;

C++ 从缓冲区C+中获取值+;,c++,buffer,C++,Buffer,我想从缓冲区中取出前8个字节(64位),并将它们组合成一个大数字,以便以后在程序中使用。我正在从硬盘上获取缓冲区中的信息,我想使用它。我使用Visual C++ 2012。< /p> 如果你有一个char *缓冲区,并且你想存储64个比特,最简单的方法是: char *buffer = "this is a test"; long long stored = *reinterpret_cast<long long *>(buffer); char*buffer=“这是一个测试”;

我想从缓冲区中取出前8个字节(64位),并将它们组合成一个大数字,以便以后在程序中使用。我正在从硬盘上获取缓冲区中的信息,我想使用它。我使用Visual C++ 2012。< /p> 如果你有一个char *缓冲区,并且你想存储64个比特,最简单的方法是:

char *buffer = "this is a test";
long long stored = *reinterpret_cast<long long *>(buffer);
char*buffer=“这是一个测试”;
long long stored=*重新解释强制转换(缓冲区);
如果你想找回你的字节:

char *retrieved = reinterpret_cast<char*>(&stored);
char*retrieved=reinterpret\u cast(&stored);

有两种明显的方法可以做到这一点。第一个是数学上的:

const unsigned char* buffer;
unsigned __int64 iValue;

iValue = buffer[0]
     | ( buffer[1] << 8 )
     | ( buffer[2] << 16 )
     | ( buffer[3] << 24 )
     | ( static_cast<unsigned __int64>(buffer[4]) << 32 )
     | ( static_cast<unsigned __int64>(buffer[5]) << 40 )
     | ( static_cast<unsigned __int64>(buffer[6]) << 48 )
     | ( static_cast<unsigned __int64>(buffer[7]) << 56 );

在您的示例中,
buffer
只有5字节长,因此这将导致读取缓冲区以外的随机内存。我有点好奇
memcpy()
如何比正确的强制转换“更好”。。。我相信演员阵容会妥善处理endianness问题(无论如何,假设基础数据在重新解释下是有意义的)。。。
memcpy(&iValue, buffer, sizeof(iValue));