尝试
(dest[1] << 8) & dest[0]
恕我直言,hByte 和 lByte 被交换了......更重要的是 123123 不是两个字节的值。Int 是有符号的,所以两个字节的最大值是 32767,但int
(通常)是 4 个字节。
我可能会建议union
在这种情况下使用 a ,因为您可以节省所有算术并且根本不需要使用显式转换。
使用联合的示例代码:
#include <iostream>
using std::cout;
using std::hex;
using std::dec;
using std::endl;
int main() {
union int2bytes {
unsigned char byte[sizeof(int)];
int val;
};
int2bytes i;
// Convert int to byte
i.val = 123123;
cout << i.val << " : " << hex << i.val << dec << endl;
for (int j = 0; j < sizeof(int); ++j)
cout << "Byte#" << j << " : " << hex << (int)i.byte[j] << dec << endl;
// Convert byte to int
i.byte[1]--;
cout << i.val << " : " << hex << i.val << dec << endl;
}
输出:
123123 : 1e0f3
Byte#0 : f3
Byte#1 : e0
Byte#2 : 1
Byte#3 : 0
122867 : 1dff3
联合可以改进一点
union int2bytes {
unsigned char byte[sizeof(int)];
int val;
int2bytes (const int2bytes& i = 0) : val(i.val) {};
int2bytes (int i) : val(i) {};
};
现在这些工作
int2bytes i = 123123;
int2bytes j; // j.val == 0
int2bytes k = i;
j = i;