博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16byte、32byte和64byte的字节序转换C语言实现
阅读量:2029 次
发布时间:2019-04-28

本文共 3117 字,大约阅读时间需要 10 分钟。

#ifndef __CRTL_EASY_BYTESWAP_H#define __CRTL_EASY_BYTESWAP_H 1#include 
#ifdef __x86_64__#define CRTL_WORDSIZE 64#else#define CRTL_WORDSIZE 32#endifstatic inline uint16_t crtl_swab16(uint16_t x){ return ((x & (uint16_t)0x00ffU) << 8) | ((x & (uint16_t)0xff00U) >> 8);}static inline uint32_t crtl_swab32(uint32_t x){ return ((x & (uint32_t)0x000000ffUL) << 24) | ((x & (uint32_t)0x0000ff00UL) << 8) | ((x & (uint32_t)0x00ff0000UL) >> 8) | ((x & (uint32_t)0xff000000UL) >> 24);}static inline uint64_t crtl_swab64(uint64_t x){ return (uint64_t)((x & (uint64_t)0x00000000000000ffULL) << 56) | (uint64_t)((x & (uint64_t)0x000000000000ff00ULL) << 40) | (uint64_t)((x & (uint64_t)0x0000000000ff0000ULL) << 24) | (uint64_t)((x & (uint64_t)0x00000000ff000000ULL) << 8) | (uint64_t)((x & (uint64_t)0x000000ff00000000ULL) >> 8) | (uint64_t)((x & (uint64_t)0x0000ff0000000000ULL) >> 24) | (uint64_t)((x & (uint64_t)0x00ff000000000000ULL) >> 40) | (uint64_t)((x & (uint64_t)0xff00000000000000ULL) >> 56);}#define _swapbyte16(s16) (((s16>>8)&0xff) | ((s16&0xff)<<8))#define _swapbyte32(i32) (((i32>>24)&0xff) | ((i32&0xff)<<24) |\ ((i32>>8)&0xff00) | ((i32&0xff00)<<8))#define _swapbyte64(l64) (((l64>>56)&0xff) | ((l64&0xff)<<56) |\ ((l64>>40)&0xff00) | ((l64&0xff00)<<40) |\ ((l64>>24)&0xff0000) | ((l64&0xff0000)<<24) |\ ((l64>> 8)&0xff000000) | ((l64&0xff000000)<<8))#define _swapbyte16_2(x) ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))#define _swapbyte32_2(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) |\ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))#define _swapbyte64_2(x) (((((x) & 0xff00000000000000ull) >> 56) \ | (((x) & 0x00ff000000000000ull) >> 40) \ | (((x) & 0x0000ff0000000000ull) >> 24) \ | (((x) & 0x000000ff00000000ull) >> 8) \ | (((x) & 0x00000000ff000000ull) << 8) \ | (((x) & 0x0000000000ff0000ull) << 24) \ | (((x) & 0x000000000000ff00ull) << 40) \ | (((x) & 0x00000000000000ffull) << 56)))#define _swapbyte16_3(x) ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))#define _swapbyte32_3(x) ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >> 8) \ | (((x) & 0x0000ff00u) << 8) | (((x) & 0x000000ffu) << 24))#define _swapbyte64_3(x) ((((x) & 0xff00000000000000ull) >> 56) \ | (((x) & 0x00ff000000000000ull) >> 40) \ | (((x) & 0x0000ff0000000000ull) >> 24) \ | (((x) & 0x000000ff00000000ull) >> 8) \ | (((x) & 0x00000000ff000000ull) << 8) \ | (((x) & 0x0000000000ff0000ull) << 24) \ | (((x) & 0x000000000000ff00ull) << 40) \ | (((x) & 0x00000000000000ffull) << 56))#endif //__CRTL_EASY_BYTESWAP_H

 

转载地址:http://xbpaf.baihongyu.com/

你可能感兴趣的文章
HTTP高并发测试
查看>>
日期时间变量的处理
查看>>
autorun.inf 配置说明
查看>>
linux下c编程之内存共享shemget函数的实现及案例-bmi体重身高测试2
查看>>
enum枚举介绍
查看>>
Flask:初见
查看>>
Flask:静态文件&模板(0.1)
查看>>
《大道至简》的幕后故事(3):“愚公移山记”事物篇
查看>>
《大道至简》的幕后故事(5):“愚公移山记”军事谋略篇
查看>>
架构师的能力模型(图)
查看>>
能力要成体系
查看>>
Qomo 2.0 beta1 发布说明及新功能
查看>>
英语突击队里程碑
查看>>
软工视频总结
查看>>
Map/reduce
查看>>
mysql 存储过程,临时表,游标
查看>>
Ehcache配置分布式缓存
查看>>
js 对象json用法举例
查看>>
crontab执行不了php的解决方法
查看>>
mongodb 对内存的严重占用以及解决方法
查看>>