我需要在複製到另一個陣列期間有效地交換數組的字節順序。複製期間的字節交換
源數組是特定類型的; char,short或int,因此所需的字節交換是明確的,並且將根據該類型進行。
我的計劃是使用多遍逐字節拷貝(簡稱爲2,簡寫爲int,...)來完成此操作。但是,是否有任何預先存在的「memcpy_swap_16/32/64」函數或庫?也許在用於BGR/RGB圖像處理的圖像處理中。
編輯
我知道如何交換個體值的字節,這是沒有問題的。我想在的副本中執行此過程,我將執行。
例如,如果我有一個數組或小端的4字節整數,我可以通過執行4個按字節複製,初始偏移量爲0,1,2和3,步長爲4來進行交換。一種更好的方法,甚至可以單獨讀取每個4字節的整數,並使用字節交換內部函數_byteswap_ushort,_byteswap_ulong和_byteswap_uint64將會更快。但我懷疑必須有現有的功能來完成這種類型的處理。
EDIT 2
剛剛發現這一點,這可能是上證所的有用基礎,但其真正的內存帶寬,可能使得它在浪費時間。
Fast vectorized conversion from RGB to BGRA
編譯器字節交換內在函數是保證使用正確指令的更好方法。但這不是問題。 – hplbsh
我不確定你爲什麼稱他們爲「更好」。它們特定於特定的編譯器。我給出的代碼將在任何真正困擾優化的編譯器上生成「正確」指令。 –
因爲即使在未優化的調試版本中它也會很快。 – hplbsh