Попробуйте
(dest[1] << 8) & dest[0]
ИМХО hByte и lByte поменялись местами ... И что более 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
Мой код правильно меняет ваш код. Проблема в том, что 123123 не вписывается в два байта. "В любом случае, спасибо". –
Давид Хеффернан прав, 123123! = 0xE0F3. 123123 = 0x1E0F3 –