C++ 在c+中将long-long转换为字节数组并返回+;

C++ 在c+中将long-long转换为字节数组并返回+;,c++,64-bit,bit-manipulation,C++,64 Bit,Bit Manipulation,我编写了一个测试,试图找出char[]数组和long之间的转换是如何工作的。部分出于我自己的理解,我正在试图找出这样做的按位方法 从概念上讲,对于long到char[],下面的内容感觉是正确的。我向左移动,然后向右移动: for (int i = 0; i < BUFFER_SIZE; i++) { buffer[i] = ((value >> (8 * i)) & 0XFF); } 问题在于将值转换回。由于整数升级,此表达式 auto byteVal = (

我编写了一个测试,试图找出
char[]
数组和
long
之间的转换是如何工作的。部分出于我自己的理解,我正在试图找出这样做的按位方法

从概念上讲,对于
long
char[]
,下面的内容感觉是正确的。我向左移动,然后向右移动:

for (int i = 0; i < BUFFER_SIZE; i++)
{
    buffer[i] = ((value >> (8 * i)) & 0XFF);
}

问题在于将值转换回。由于整数升级,此表达式

auto byteVal = ((buffer[i]) << (8 * i));
虽然使用
+
可以很好地工作,但组合值的更常见方法是使用
|

recoveredValue |= byteVal;

这解决了问题,尽管我必须使用
|=
方法,而不是
+
。如果我使用“+”方法,它将继续失败。
auto byteVal = ((buffer[i]) << (8 * i));
auto byteVal = (((long long)buffer[i]) << (8 * i));
recoveredValue |= byteVal;