轉移問題我有一個32位的數字和我想從它創建4個8位的數字。例如:按位用C
如果32比特數爲0xABCD1234
, 8位陣列必須是這樣的:
dataArray[0] = 0x34; dataArray[1] = 0x12; dataArray[2] = 0xCD; dataArray[3] = 0xAB;
所以我想通了,我可以通過移動32執行它位值並掩蔽LSB部分。下面摘錄效果很好:
uint32_t uniquenumber = 0xABCD1234;
uint8_t dataArray[8];
int j;
uint32_t shifted = 0;
for(j=0;j<4;j++)
{
shifted = (uniquenumber>>(j*8));
dataArray[j] = shifted & (0xFF);
}
但如果我嘗試通過刪除shifted
變量,直接運送其計算主要計算縮短,這是行不通的。我無法弄清楚差異,爲什麼它不起作用。這是編輯的代碼片段不起作用。
uint32_t uniquenumber = 0xABCD1234;
uint8_t dataArray[8];
int j;
for(j=0;j<4;j++)
{
dataArray[j] = (uniquenumber>>(j*8)) & (0xFF);
}
第二個片段的輸出是在這裏:
dataArray[0] = 0x34; dataArray[1] = 0x12; dataArray[2] = 0x00; //False. dataArray[3] = 0xAB;
順便說一句,這是一種嵌入程序上的微控制器工作。我不認爲這是一個打印問題,因爲我沒有通過打印操作觀察它。我在調試模式下使用Watch
觀察它。另外,我可以在同一個窗口觀察第一個片段,並且數值是正確的。
更新:這裏有兩種方式dissamblies。
對於第一片段:
而對於第二片斷:
編譯器:ARM GCC 4.9-2015-Q1-更新
調試器:賽普拉斯PSoC Creator中3.3
MCU:CYBLE-022001
我將與Cypress的接觸,我想他們可以給這個提示。如果我們解決了問題,我會發布答案。
[雙方似乎確定以我(http://ideone.com/TE1IO2)。你的第二個解決方案有什麼問題?什麼是輸出? – LPs
什麼類型被轉移? –
我添加了第二個片段的輸出。 –