我想从缓冲区中获取前8个字节(64位)并将它们组合成一个大数字,以便稍后在程序中使用。我从HDD获取缓冲区中的信息,我想使用它。我正在使用Visual C ++ 2012。
答案 0 :(得分:0)
如果你有一个char *缓冲区,并且你想存储64位,最简单的方法是:
char *buffer = "this is a test";
long long stored = *reinterpret_cast<long long *>(buffer);
如果你想恢复你的字节:
char *retrieved = reinterpret_cast<char*>(&stored);
答案 1 :(得分:0)
有两种明显的方法可以做到这一点。第一个是数学上的:
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 );
如果需要转换数据的字节顺序,则需要交换字节。
另一种方法是直接复制字节 - 你可以使用reinterpret_cast
来完成,如另一个答案所示,但更好的&#34;方法是使用memcpy
,例如:
memcpy(&iValue, buffer, sizeof(iValue));