-
2013-08-29 11:23:34
int big_endian();
int little_endian();int _tmain(int argc, _TCHAR* argv[])
{
int iBigEndian = big_endian();
int iLittleEndian = little_endian();
return 0;
}
int big_endian()
{
union
{
long l;
char c[sizeof(long)];
}u;u.l = 1;
return u.c[sizeof(long) - 1] == 1;
}int little_endian()
{
union
{
long l;
char c;
}u;u.l = 1;
return u.c == 1;
}更多相关内容 -
C语言判断大端小端
2021-05-18 12:20:50#include#includeintmy_if(inta){char...//断言函数(防止为空指针)//直接返回值://1的截取为:01(截取:char类型为1字节截取整形地址高地址)//放于高地址则返回:00-0//放于低地址则返回:01-1return*p;}intmain(){int...#include
#include
int my_if(int a)
{
char* p =(char *) &a;
assert(p != NULL); //断言函数(防止为空指针)
//直接返回值:
//1的截取为:01 (截取:char类型为1字节截取整形地址高地址)
//放于高地址则返回:00-0
//放于低地址则返回:01-1
return *p;
}
int main()
{
int a = 1; //内存中 左边:低地址 右边 :高地址
int b=my_if(a); //1的内存存储为: 0x 00(高位) 00 00 01(低位)----->存储规则
if (0 == b)
{
printf("大端\n"); // 数据低位放于存储高位,数据高位放于存储低位. 0x 00 00 00 01
}
else
{
printf("小端\n"); //与之相反 : 0x 01 00 00 00
}
return 0;
}
精简版:(自定义函数中直接返回值)#include
#include
int my_if(int a)
{
return *(char*)&a;
//char* p =(char *) &a;
//assert(p != NULL); //断言函数(防止为空指针)
直接返回值:
1的截取为:01 (截取:char类型为1字节截取整形地址高地址)
放于高地址则返回:00-0
放于低地址则返回:01-1
//return *p;
}
int main()
{
int a = 1; //内存中 左边:低地址 右边 :高地址
int b=my_if(a); //1的内存存储为: 0x 00(高位) 00 00 01(低位)----->存储规则
if (0 == b)
{
printf("大端\n"); // 数据低位放于存储高位,数据高位放于存储低位. 0x 00 00 00 01
}
else
{
printf("小端\n"); //与之相反 : 0x 01 00 00 00
}
return 0;
}
标签:小端,00,01,int,0x,C语言,char,地址,大端
来源: https://blog.51cto.com/u_15144773/2712823
-
关于大小端的判断函数
2020-08-30 18:07:37小端也就是高字节数据存放在高地址的内存中; 其次,要明确栈空间生长模型与内存生长模型不同。栈空间生长是从高地址向低地址(向下)生长,但是内存生长是向高地址生长的。比如申请一个包含10个元素的char数组a,a...
首先,大端也就是高字节数据放在低地址的内存;小端也就是高字节数据存放在高地址的内存中;
其次,要明确栈空间生长模型与内存生长模型不同。栈空间生长是从高地址向低地址(向下)生长,但是内存生长是向高地址生长的。比如申请一个包含10个元素的char数组a,a[0]…到a[9] 内存地址分别是x,x+1,x+2…x+9。就是内存生长与栈生长方向相反的,新来的变量会根据占用内存的大小在栈空间选择一个起点,然后存放数据。
好了,那么
union{
char a;
int b;
}
这个联合体的内存模型是怎么样?应该是b的起始地址与a的起始地址是相同的,同时联合体占用4B内存,a是在最低地址的那个B中的。这时候可以判断大小端了
因为0x00000001中,1是低字节。又因为a放在联合体中低地址的一个B,如果读取test.a,他的值为1,说明低字节存放在低地址,是小端模式;如果不为1,说明是大端模式。目前51单片机和网络字节序都是大端模式的,其他的单片机或电脑一般都是小端。(如有纰漏欢迎指正)
-
判断大端存储与小端存储方式
2022-01-31 18:17:54判断计算机存储方式计算机中数据的存储有两种方式:大端存储与小端存储
①对于存储在计算机中的数据,其是以十六进制保存的,而对于一个十六进制数:
0x00 00 00 01,从左向右位权依次降低,即:左边为高位权,右边是低位权。
②我们规定从左向右地址依次增高,即:左边为高地址,右边为低地址。
以前面的前提条件为基础,我们可以引出大端存储模式的概念:
将高位权的数字放置于低地址,将低位权的数字放置在高位置。
而与其相反的则是小端存储模式:
将低位权的数字放置于低地址,将高位权的数字放置于高地址。
而根据这一特性我们也不难推测出整形数据 1 在内存中的表达方式:
0x 00 00 00 01 自左向右,位权降低
根据上述的定义我们也不难推测出在内存中的存储方式:
对于判断大小端的方式,我们采取两种方法:
1.顺次访问字节法 2.联合体法
顺次访问字节法:
#include<stdio.h> void system_check(int a) { if (*((char*)&a) == 1) { printf("小端存储"); } else { printf("大端存储"); } } int main() { int test = 1; system_check(test); return 0; }
这一方法的核心步骤在于if的判断条件:*((char*)&a)
我们不妨分开来进行分析:
首先取出a的地址,即为:&a
对于整型a,其占四个字节。使用指针进行解引用操作时,自然也是每次顺次访问四个字节,而以整型指针的身份进行解引用无法得知其存储方式。
我们不妨将&a强制类型转换为char类型,在接下来的每一次解引用都只能向后访问一个字节。此时即为:(char*)&a
然后我们进行解引用操作,对地址进行访问。此时即为:*((char*)&a)
以四个字节访问,我们无法判断存储方式;但以一个字节访问,我们不难看出二者的差别:
对于大端存储,直到访问到最后一个字节,通过解引用操作才能找的1;而对于小端存储,在访问到第一个字节时我们就可以发现它就是1。
联合体法:
联合体是一种结构,其存在的意义主要就是尽可能地节省内存空间;为了节省空间,其可以接受两个不同类型的元素在内存空间上的重叠。
在内存空间上可以表示为:
对于联合体法的具体方法就是先对整型赋值,再对其字符类型元素解引用,看其是不是1.
代码如下:
union un { char a; int b; }; int main() { union un u; u.b = 1; if (u.a == 1) { printf("小端存储"); } else { printf("大端存储"); } return 0; }
-
【C语言】判断计算机是大端存储还是小端存储(两种方法)
2021-10-26 16:54:16判断计算机是大端存储还是小端存储 文章目录判断计算机是大端存储还是小端存储一、什么是小端存储和大端存储?二、两种实现方式1.直接访问地址2.使用共用体特性查看总结 一、什么是小端存储和大端存储? 存储... -
详解大端 小端 (函数判断及转换)
2013-05-18 12:59:54关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋 -
c语言 union及 大端小端
2021-05-18 12:19:42这里需要考虑存储模式:大端模式和小端模式。 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 输出为0x39380000 小端模式(Little_endian):字数据的高字节存储在高... -
C语言判断当前机器是大端还是小端
2021-02-10 10:06:27C语言判断当前机器是大端还是小端 目录 大小端概念 为什么有大端和小端 代码实现 什么是大小端: **大端(存储)模式:**是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 **小端(存储)... -
C/C++ —— 小端转大端函数的使用
2020-11-27 13:32:34函数说明 #include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort);...如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是 -
判断机器是大端机还是小端机的方法
2022-01-18 11:25:34如何得知本机是大端机还是小端机 -
使用C语言判断一个机器是大端机还是小端机
2018-07-27 17:57:311.什么是大端,什么是小端? 大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内。 小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。 一个整型是4个字节,如:0x1a2b3c4d。... -
判断大端小端以及模拟htons函数
2018-08-22 21:16:22大端:指的是一个整数的高位字节存放在内存的低地址处 小端:指的是一个整数的低位字节存放在内存的低地址处 ...//判断大端或者小端 void IsPort() { union { short int a;//短整型两个字节 char b[size... -
C语言-- 大端小端详解
2020-12-06 08:40:00一、什么是大端和小端所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。简单来... -
C语言简单判断是大端还是小端(字节序)以及网络字节序
2021-05-26 10:32:49大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。... -
用C语言程序判断大小端模式
2021-05-19 14:07:46用C语言程序判断大小端模式1.大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式相反2.为什么有大小端之分???因为在计算机系统中,存储是以字节为单位的,每个地址... -
C语言判断大小端(两种方法)
2022-04-04 23:42:07小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地 址中。 方法一:使用强制类型转换 int is_byteorder(int* p) { return *(char*)p;//强制类型转换,将精度跳得更高一点 }... -
大端和小端的含义及判断代码
2018-11-27 21:08:11怎样存储多字节的数据就分为了大端和小端。字节序只和使用的处理器架构有关,和编程语言无关,常见的Intel系列是小端序。 2、大端和小端 大端模式(Big-endian):数据的高位字节保存在内存的低地址中,而数据的... -
C语言重难点:大端小端
2021-05-13 16:46:11文章目录一:大端和小端二:经典问题 一:大端和小端 大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地中; 小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据... -
关于大小端的简单介绍以及使用C写一个函数判断当前系统是大端存储还是小端存储
2017-10-25 21:53:41小端模式: 字数据的低字节存储在低地址中,而字数据的高字节存储在高地址中。 如图: 用C写一个函数判断当前系统的存储模式#include #include int endian() { int i = 1; char *p = (char *)&i; -
c语言编写程序判断机器是大端或者小端储存
2022-03-28 22:45:53我们都知道机器对于整数的储存是分大端储存模式和小端储存模式的,那么怎么知道我们用的机器是大端还是小端呢?今天我就用c语言编写一个程序来判断大小端。如果有什么不对的请指正 #include<stdio.h> int... -
c++大小端判断
2022-04-18 16:48:03小端模式就是高字节存储在高地址处,低字节存储在低地址处 举例说明: int aa=0x30313233;这是一个十六进制的整数 高字节->低字节,在本例中是30 31 32 33 ,这个是人的习惯,读数都是从左往右的 高地址->... -
判断单片机MCU是大端还是小端模式
2022-01-13 17:09:34最后咨询原厂得知提供的demo代码是大端编码模式的MCU代码,如果是小端模式,在部分写寄存器操作的过程中,如果直接传指针数据会反掉。 杰理的MCU应该是小端模式,平时写代码用memcpy函数操作指针赋值最后得到的结果... -
大端小端模式判断
2017-10-20 22:48:45大端小端模式 -
C语言再学习-- 大端小端详解(转)
2017-01-14 19:23:57参看:详解大端模式和小端模式 一、什么是大端和小端 所谓的大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 所谓的小端模式,就是低位字节排放在内存的低地址端,高位字节排放在... -
利用 union来简单的判断系统是大端还是小端
2020-02-12 22:08:33前言: 在B站上看了一个视频 up 主 给了一段代码 感觉挺有意思的 试了一试 果然 32位 4字节 int 1 在计算机中...我们写个简单的函数 来判断系统是大端还是小端 union EndianTest { int8_t u[4]; int32_t i; }; ... -
C++怎么判断大小端模式
2021-02-26 12:51:03小端模式便于机器处理, 大端模式方便人阅读。 测试平台的字节序模式: // 代码1 union test { int a; char b; } c; int main(int argc, char const *argv[]) { c.a = 1; cout << (c.b & 1 ? "小端" : ... -
大端和小端
2021-03-10 11:00:05一、什么是大端和小端 大端模式,就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 小端模式,就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 举个例子,比如数字 0x12 34 56... -
编写函数判断当前的机器大端小端
2017-07-28 22:07:34#include <stdio.h> int CheckSystem() { union check { int i; char ch; }c; c.i = 1;... printf("小端口模式\n"); } else { printf("大端口模式\n"); } return 0; } -
通过程序判断系统是小端存储还是大端存储模式
2021-08-15 16:48:39三、通过程序判断系统是小端存储还是大端存储模式 一、什么小端存储,什么是大端存储? 小端模式(Little-endian), 是指数据的高位字节保存在内存的高地址中,而数据的低位字节保存在内在的低地址中,这种存储... -
使用Union判断大小端
2021-03-08 21:44:45今天看了一手Union,之前都快忘光了,想起大小端才有点印象。 Union,也就是联合体。在C++中可以从来处理 n选1 的变量占用同样...那怎么利用它来测试大端小端呢?看下面的代码。 c.a = 1; return 1 == c.b;//返回1则为