buildin 字节交换
生活随笔
收集整理的這篇文章主要介紹了
buildin 字节交换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
template<typename T> T EndianScalar(T t) {#if FLATBUFFERS_LITTLEENDIANreturn t;#else#if defined(_MSC_VER)#pragma push_macro("__builtin_bswap16")#pragma push_macro("__builtin_bswap32")#pragma push_macro("__builtin_bswap64")#define __builtin_bswap16 _byteswap_ushort#define __builtin_bswap32 _byteswap_ulong#define __builtin_bswap64 _byteswap_uint64#endif// If you're on the few remaining big endian platforms, we make the bold// assumption you're also on gcc/clang, and thus have bswap intrinsics:if (sizeof(T) == 1) { // Compile-time if-then's.return t;} else if (sizeof(T) == 2) {auto r = __builtin_bswap16(*reinterpret_cast<uint16_t *>(&t));return *reinterpret_cast<T *>(&r);} else if (sizeof(T) == 4) {auto r = __builtin_bswap32(*reinterpret_cast<uint32_t *>(&t));return *reinterpret_cast<T *>(&r);} else if (sizeof(T) == 8) {auto r = __builtin_bswap64(*reinterpret_cast<uint64_t *>(&t));return *reinterpret_cast<T *>(&r);} else {assert(0);}#if defined(_MSC_VER)#pragma pop_macro("__builtin_bswap16")#pragma pop_macro("__builtin_bswap32")#pragma pop_macro("__builtin_bswap64")#endif#endif }
轉載于:https://my.oschina.net/lyr/blog/317248
總結
以上是生活随笔為你收集整理的buildin 字节交换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bzoj2743
- 下一篇: Microsoft Dynamic CR