嘗試
(dest[1] << 8) & dest[0]
恕我直言hByte和1字節被交換......而更重要的是123123不是一個兩個字節的值。 Int是有符號的,所以在兩個字節上,最大值是32767,但是int
(通常)是4個字節。
在這種情況下,我可能會建議使用union
,因爲您可以省去所有的算術運算,而且根本不需要使用顯式轉換。
的示例代碼使用工會:
#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;
返回值「57578」而不是「123123」。無論如何,謝謝 – Joaquin 2013-05-06 22:13:17
我的代碼正確地反轉了你的代碼。問題是123123不適合兩個字節。 「不管怎樣,謝謝你」。 – 2013-05-06 22:16:27
David Heffernan是正確的,123123!= 0xE0F3。 123123 = 0x1E0F3 – 2013-05-06 22:18:03