我想从缓冲区中取出前 8 个字节(64 位)并将它们组合成一个大数字,以便稍后在程序中使用。我从 HDD 获取缓冲区中的信息,我想使用它。我正在使用 Visual C++ 2012。
问问题
832 次
2 回答
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 );
如果您需要转换数据的字节顺序,您可以交换字节。
另一种方法是直接复制字节 - 您可以使用 areinterpret_cast
如另一个答案所示,但“更好”的方法是使用memcpy
,例如:
memcpy(&iValue, buffer, sizeof(iValue));
于 2013-05-31T00:18:35.697 回答
0
如果你有一个 char* 缓冲区,并且你想存储 64 位,最简单的方法是:
char *buffer = "this is a test";
long long stored = *reinterpret_cast<long long *>(buffer);
如果你想取回你的字节:
char *retrieved = reinterpret_cast<char*>(&stored);
于 2013-05-30T21:16:19.400 回答