看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《poorplus (poorplus)》之銘言: : 假設unsigned char a[4] = {1,2,3,4} : n為int型態 : 則memcpy(&n, a, 4)後 : n = 0x04030201 : 除了一個byte一個byte塞進去以外 : 不知是否有好的方法可以快速的讓 : n = 0x01020304 : 謝謝 #define BSWAP32(x) \ ((x) << 24) + (((x) & 0xff00) << 8) + \ (((x) >> 8) & 0xff00) + ((x) >> 24) unsigned int n = '\4\3\2\1'; n = BSWAP32(n); _assert(n == 0x01020304); 擔心BSWAP32看起來很慢嗎? 放心,最佳化後都是在register操作 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.204.92.148
bobhsiao:open source 內的 swap 都這樣寫 06/16 09:08
suhorng:可是我開 O2, O3 優化後沒有優化為 bswap 指令耶@@ 06/16 19:58
kevingwn:沒說會最佳化成bswap啊:P 我沒試過bswap,很快嗎?改天試試 06/16 21:33
bleed1979:__asm__("bswap %0" : "+r" (val)); 嵌入C優化後呢? 06/17 07:02