作者kevingwn (如雲如風的人生)
看板C_and_CPP
標題Re: [問題] little endian的困擾
時間Wed Jun 16 01:42:12 2010
※ 引述《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