我有以下轉換位和背部
typedef struct fpButtons {
/** BYTE 0 **/
uint8_t button_1:1;
uint8_t button_2:1;
uint8_t button_3:1;
uint8_t button_4:1;
uint8_t button_5:1;
uint8_t button_6:1;
uint8_t button_7:1;
uint8_t button_8:1;
/** And BYTE 2 which I didn't paste to save SO's space lol **/
// button_9:1 to button_16:1
} FP_BUTTONS;
的結構而這個功能,讓一個無符號整數,它的位應該建立上述
void FP_UpdateData(FP_BUTTONS *data, uint8_t b1, uint8_t b2)
{
data->button_1 = (b1 & (1 << 1)) >> 1;
data->button_2 = (b1 & (1 << 2)) >> 2;
data->button_3 = (b1 & (1 << 3)) >> 3;
data->button_4 = (b1 & (1 << 4)) >> 4;
data->button_5 = (b1 & (1 << 5)) >> 5;
data->button_6 = (b1 & (1 << 6)) >> 6;
data->button_7 = (b1 & (1 << 7)) >> 7;
data->button_8 = (b1 & (1 << 8)) >> 8;
//Do the same thing for button 9 to 16
}
的結構現在存儲後,我必須把它發送到其他地方:
void APP_Send(){
uint8_t packet[2];
packet[0] = *((uint8_t*) &FP_BUTTONS_Data);
packet[1] = *(((uint8_t*) &FP_BUTTONS_Data)+1);
//Send stuff away.....
}
儘管所有的努力,沒有上述代碼似乎窩RK。我在一個嵌入式處理器上做這件事,它很難調試。我想知道一些C-Guru傢伙是否可以告訴我這段代碼有什麼問題?
您的第一班不應該是'1 << 0'嗎? (不是一個解決方案,因爲它仍然應該做*某事* - 錯誤的,但仍然)。 – usr2564301
當涉及到可移植性或甚至在具有字節順序的單個平臺內時,位域顯然可能成爲主要悲傷的根源。值得避免他們贊成只是按照自己的邏輯進行按位邏輯。也就是說,如果他們工作的很好,而且你還可以,那麼我真的推薦一個帶有'fpButtons'和'uint8_t'的工會。那麼你不必麻煩抽取/包裝位。否則,無論如何,當你只是要進行所有這種按位提取時,使用位域似乎毫無意義。 –
@Ike我真的不能使用聯合解決方案,因爲它是項目的其他部分所必需的。 –