2016-09-29 28 views
-5

我打算每次都用8位輸入基本上採用64位輸入。我遇到的問題是,我有一個這些8位正在被寫入的64位的寄存器。迭代中每次8位在64位寄存器中被重疊。需要這個解決方案。C編程通過每次輸入8位輸入將64位值存儲在寄存器中

int main(){ 
int Status;i=9; 
u64 input=0x0,read_data,input_value=0x0; 

print("\r\nEnter 64 bit value:"); 

while(i--){ 
     input = inbyte(); 
     if (isalpha(input)) { 
      input = toupper(input); 
     } 
     input = atoh(&input); 
     input_value=input; 
} 

xil_printf("input = 0x%x\r\n",input_value); 

發現存儲和讀取64位值有困難。 任何幫助表示讚賞!

+1

請格式化您的代碼以使其可讀。 input_value會在每次迭代時被覆蓋,因爲您覆蓋它:'input_value = input'。 –

+1

將舊值左移8位,然後或新值 – user4581301

+1

閱讀初學者級C編程手冊中的按位操作符。 – Lundin

回答

1

由於您在每個循環中覆蓋了input_value,因此您將丟失先前的讀取輸入。

你需要做一些移位和按位或。

假設輸入是MSB第一,簡單地做:

// input_value=input;    // Replace this line with the two below 
input_value = input_value << 8;  // Shift 8 bit right 
input_value = input_value | input; // Bitwise or'ing of the new input 
+0

謝謝。我的問題已解決! –

1

你總是可以通過位位移8位的電流將input_value,做一個按位或(|)運算的下一個8位添加到它。

input_value = (input_value << 8) | input;