我知道如何扭轉字節順序(convert big endian to little endian in C [without using provided func]) - 在這種情況下,我想使用__builtin_bswap64複製字節反轉uint64_t中以uint8_t數組
我也知道如何將一個64位UINT複製到一個字符數組 - 理想的記憶體。 (How do I convert a 64bit integer to a char array and back?)
我的問題是這兩種的結合。在問題的根源,我試圖找到這段代碼更快的替代方案:
carr[33] = ((some64bitvalue >> 56) & 0xFF) ;
carr[34] = ((some64bitvalue >> 48) & 0xFF) ;
carr[35] = ((some64bitvalue >> 40) & 0xFF) ;
carr[36] = ((some64bitvalue >> 32) & 0xFF) ;
carr[37] = ((some64bitvalue >> 24) & 0xFF) ;
carr[38] = ((some64bitvalue >> 16) & 0xFF) ;
carr[39] = ((some64bitvalue >> 8) & 0xFF) ;
carr[40] = (some64bitvalue & 0XFF);
由於存儲器複製不採取__builtin_bswap64源論證的結果(?或者它),我想這:
*(uint64_t *)upub+33 = __builtin_bswap64(some64bitvalue);
,但我最終的 錯誤:左值要求作爲分配的左操作數
是否有快速替代原來的代碼我想在所有的更換?
什麼的'upub'類型?您可能違反了嚴格的別名規則。 – user694733
爲什麼你認爲它太慢?你有沒有看看彙編代碼?你有個人資料嗎?首先集中編寫便攜和可讀代碼(例如,通過將其封裝在一個函數中),只有在遇到速度問題時才進行優化。 – Olaf
我確實有速度問題,我知道「過早優化問題」。這裏不適用。我的假設完全基於直覺,但基於'*((uint64_t *)upub + 33)= __builtin_bswap64(大約64bitval);'我的直覺證明是正確的。 – Perlator