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;