从缓冲区C ++中获取值

时间:2013-05-30 21:02:19

标签: c++ buffer

我想从缓冲区中获取前8个字节(64位)并将它们组合成一个大数字,以便稍后在程序中使用。我从HDD获取缓冲区中的信息,我想使用它。我正在使用Visual C ++ 2012。

2 个答案:

答案 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));