我有一個uint8_t
陣列,我需要從前面的4個元素,32位,創建一個size_t
(uint32_t
在我的機器上)。從uint8_t數組的四個元素獲取uint32_t的優雅方式?
實施例的非工作代碼:
uint8_t array[8];
array[0] = 128;
array[1] = 128;
array[2] = 0;
array[3] = 0;
size_t size = array[0]; //results in 128
size = *array; //also results in 128
該數組的前四個指數的字節是80 80 00 00
。
我希望size_t
通過讀取該數組中最前面的4個字節(小端)來生成128 + 256 * 128。有沒有辦法使size_t
初始化直接讀取這4個字節,就好像該數組是任何舊的內存塊,而不必手動添加和乘法以找到我想要的值?
我不知道任何有關這些轉變經營者;這比我說的更好。這會導致機器進行數學運算,但似乎只會相當於複製數位。這會比做我建議的慢,但有一些編譯器標誌檢測endianness? – sudo
不要擔心速度,直到(1)你已經證明你的代碼太慢,並且(2)你已經證明即使開啓了所有的優化。大多數編譯器在優化這種事情方面做得很好。只需循環展開就可以解決這個問題,現代x86機器擁有各種各樣的奇特操作碼,僅用於這種類型的操作。 – dmckee
我得到了兩個基本相當的答案,都很好,但是這個更清潔一點,可擴展性更強,所以我會將其標記爲答案。 – sudo