2015-09-02 91 views
-2

我想用一個定義從int獲得4個字節。我應該如何編寫這個定義?如何使用define從int生成一個字節數組?

int k = 4; 
unsigned char byteK[4]; 

byteK[0] = (unsigned char)k & 0xFF; 
byteK[1] = (unsigned char)((k >> 8) & 0xFF); 
byteK[2] = (unsigned char)((k >> 16) & 0xFF); 
byteK[3] = (unsigned char)((k >> 24) & 0xFF); 

回答

0

你的意思是類似的東西(假設int你的機器上確實是4字節):

#define INT_TO_4BYTE_ARRAY(int_var) ((unsigned char *)(&int_var)) 

,然後你可以使用它像這樣:

int new_var = 0x11223344; 

unsigned char byte0 = INT_TO_4BYTE_ARRAY(new_var)[0]; 
unsigned char byte1 = INT_TO_4BYTE_ARRAY(new_var)[1]; 
unsigned char byte2 = INT_TO_4BYTE_ARRAY(new_var)[2]; 
unsigned char byte3 = INT_TO_4BYTE_ARRAY(new_var)[3]; 

在我的機器(little endian)我得到:

byte0 = 0x44 byte1 = 0x33 byte2 = 0x22 byte3 = 0x11

+0

請記住,您需要編寫兩個(或更多)版本,每個版本針對目標平臺的每個字節序。 –

+0

@TobySpeight,不是我,而是@KenChu。兩個用於每個字節序,一個用於sizeof(int)== 2',一個用於sizeof(int)== 4'。但是如果他需要一些本地任務而不是產品,或者不需要移植到其他平臺上,那麼他只能使用一個工作版本。 –

+0

非常感謝Alex Lop。這就是我需要的。但如果可能是 #define INT32_TO_4BYTE_ARRAY(int_var){},然後返回一個無符號字符數組[4],如無符號字符*溫度= INT32_TO_4BYTE_ARRAY(int_var),然後我可以從溫度 –