2013-05-06 77 views

回答

3

要執行的函數的反函數int2bytes你只需做到這一點:

int val = (lByte << 8) | hByte; 

雖然,我覺得你有你的變量的名字背到前面。我打電話給val&0xff的低字節,和val >> 8的高字節。


你也是在假設你能適應123123爲2個字節錯誤的。請記住2^16是65536

我有一個功能,讓我一個int值分成2個字節(例如:INT 「123123」 的結果在E0F3;高位字節= 0xF3和低位字節=取0xE0)

那麼,E0F3表示十進制等於57587.在您對我的答案發表的評論中,您報告的值是多少。

現在,用十六進制表示的1231230x1E0F3,並且您至少需要三個字節來存儲該值。

+0

返回值「57578」而不是「123123」。無論如何,謝謝 – Joaquin 2013-05-06 22:13:17

+1

我的代碼正確地反轉了你的代碼。問題是123123不適合兩個字節。 「不管怎樣,謝謝你」。 – 2013-05-06 22:16:27

+0

David Heffernan是正確的,123123!= 0xE0F3。 123123 = 0x1E0F3 – 2013-05-06 22:18:03

0

嘗試

(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; 
相關問題