C++编译期间字节序判断
当前常用的字节序一般就两种,大端序和小端序。
下面列出四种字节序的表达方式。在对应平台下,内存布局为{0x,00,0x01,0x02,0x03}的四字节,表示为十六进制的值就如下面代码所示的。
ENDIAN_BIG = 0x00010203, /* 大端序 ABCD */
ENDIAN_LITTLE = 0x03020100, /* 小端序 DCBA */
ENDIAN_BIG_WORD = 0x02030001, /* 中端序 CDAB, Honeywell 316 风格 */
ENDIAN_LITTLE_WORD = 0x01000302 /* 中端序 BADC, PDP-11 风格 */
gcc或clang中可以使用 __BYTE_ORDER__宏来判断
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 这两个宏是gcc或者clang支持的
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
puts("小端序");
#elif __BYTE_ORDER__== __ORDER_BIG_ENDIAN__
puts("大端序");
#else
puts("未知字节序");
#endif // __BYTE_ORDER__
return 0;
}
还有使用C++ 11的constexpr关键字特性来做编译时判断的方法。但是我没有编译通过。
相关的可以看下面这两个网页
- 在编译时检查字节序
http://codereview.stackexchange.com/questions/45675/checking-endianness-at-compile-time - 编译器预定义宏
https://sourceforge.net/p/predef/wiki/Endianness/
C++编译期间字节序判断的更多相关文章
- 用C语言,如何判断主机是 大端还是小端(字节序)
所谓大端就是指高位值在内存中放低位地址,所谓小端是指低位值在内存中放低位地址.比如 0x12345678 在大端机上是 12345678,在小端机上是 78564312,而一个主机是大端还是小端要看C ...
- C/C++字节序(大端/小端)判断
C/C++大端小端判断 说的是变量的高字节.低字节在内存地址中的排放顺序. 变量的高字节放到内存的低地址中(变量的低字节放到内存的高地址中)==>大端 变量的高字节放到内存的高地址中(变量的低字 ...
- 判断.net中在windows系统下的字节序
字节序,是指字节在内存中的存储顺序.其又分为大端字节(Big-Endian)序和小端字节序(Little-Endian). 以下摘自百度百科: a) Little-Endian就是低位字节排放在内存的 ...
- 如何判断CPU字节序之[Big-endian vs Little-endian]
[本文链接] http://www.cnblogs.com/hellogiser/p/big-endian-vs-little-endian.html [Big-endian vs Little-en ...
- C语言字节对齐问题详解(对齐、字节序、网络序等)
首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 博客园用的少,不知道怎么发布转载文章,只能暂时这样了. 引言 考虑下 ...
- 字节序(byte order)和位序(bit order)
字节序(byte order)和位序(bit order) 在网络编程中经常会提到网络字节序和主机序,也就是说当一个对象由多个字节组成的时候需要注意对象的多个字节在内存中的顺序. 以前我也基本只了 ...
- linux kernel如何处理大端小端字节序
(转)http://blog.csdn.net/skyflying2012/article/details/43771179 最近在做将kernel由小端处理器(arm)向大端处理器(ppc)的移植的 ...
- 字节序:Big Endian 和 Little Endian
一.字节序 字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序. 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如:如果C/C++中的一个int型变量 a 的起始地址是& ...
- 09.C语言:预处理(宏定义)、字节序、地址对齐
一.预处理 预处理 gcc -E Hello.c -o hello.i 编译 gcc -S hello.i -o hello.s 汇编 gcc -c hello.s -o hello.o 链接 gcc ...
随机推荐
- C语言学习 第十一次作业总结
作业总结 两次的作业,都是和指针有关.从第一次的作业开始,我就多次让同学们思考这个问题:为什么要用指针,为什么在函数的形参中要使用指针.如果能够想明白这2个问题,那么同学们应该会指针的了解就差不多足够 ...
- canvas
1. 画布可以通过两只手指上下移动,画布大小默认为屏幕大小的2倍,通过自定义View,嵌套scollview实现. Y 2. 通过处理手指触摸事件,一根手指时,使用Canvas绘制移动路径,产生直线: ...
- RESTful API 设计指南
转自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机. ...
- caffe源码解析
http://blog.csdn.net/lanxuecc/article/details/53186613
- C#-WebForm-简单控件
在HTML中称"元素",添加了"runat='server'"后称控件,后台服务端可以控制 想要后台改变前端的控件,需要先让后台获取前端控件 常用的简单的表单元 ...
- C#-WebForm-点击网页中的按钮后跳转到其他页面是怎么实现的?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 通过一个实例重新认识引用类型,值类型,数组,堆栈,ref
昨天在写代码时候遇到了一个问题,百思不得其解,感觉颠覆了自己对C#基础知识的认知,因为具体的情境涉及公司代码不便放出,我在这里举个例子,先上整个测试所有的代码,然后一一讲解我的思考过程: using ...
- Redis-Sentinel(Redis集群监控管理)
Redis的高可用方案的实现:主从切换以及虚拟IP或客户端 从Redis 2.8开始加入对Sentinel机制从而实现了服务器端的主从切换,但目前尚未发现实现虚拟IP或客户端切换方案 Redis-Se ...
- Apache service named reported the following error(OS 10055)由于系统缓冲区空间不足或队列已满解决办法?
apache启动失败报错: The Apache service named reported the following error:>>> AH00451: no listeni ...
- mac电脑http代理服务设置公司内网的相关配置
哈喽,亲爱的小伙伴们 ,今天给大家分享一下公司内网配置 http代理服务设置及外网访问 ,<这是mac电脑的噢> ===链接地址我的github项目 https://github.c ...