-1

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

4

2 回答 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 回答