测试机器的大小端

方法一:

#include <stdio.h>

int check_sys()
{
 int i = 1;
 int *p = &i;
 char *q = (char *)p;
 if (*q == 1)
 {
  return 0;
 }
 else
 {
  return 1;
 }
}
int main()
{
 int ret = check_sys();
 if (ret == 1)
 {
  printf("big\n");
 }
 else
 {
  printf("little\n");
 }
 return 0;
}

//方法二:利用联合的特点

#include <stdio.h>

check_sys()
{
 union UN
 {
  char c;
  int i;
 }un;
 un.i = 1;
 if (un.c == 1)
 {
  return 0;
 }
 else
 {
  return 1;
 }
}
int main()
{
 int ret = check_sys();
 if (ret == 1)
 {
  printf("big\n");
 }
 else
 {
  printf("little\n");
 }
 return 0;
}

时间: 2024-10-11 19:16:29

测试机器的大小端的相关文章

判断机器的大小端模式

大小端模式: 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放:这和我们的阅读习惯一致. 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低. 下面以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们

测试当前机器的大小端模式(两种方法)

方法一: #include <stdio.h> int check_sys() {  int i = 1;  int *p = &i;  char *q = (char *)p;  if (*q == 1)  {   return 0;  }  else  {   return 1;  } } int main() {  int ret = check_sys();  if (ret == 1)  {   printf("big\n");  }  else  {  

经典笔试题:用C写一个函数测试当前机器大小端模式

“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h> 2 3 union test 4 { 5 int a; 6 char b; 7 }; 8 9 int endian_test(void) 10 { 11 union test t1; 12 t1.a = 1; 13 return t1.b; 14 } 15 16 int main(void) 17 { 18 int i =

C语言之大小端问题

1:大小端名字的由来及发展 (1)在乔纳森·斯威夫特的著名讽刺小说<格列夫游记>中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破.斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧. (2)后来计算机通信发展起来后,遇到一个问题就是:在串口等串行通信中,一次只能发送1个字节.这时候我要发送一个int类型的数就遇到一个问题.int类型有4个字节,我是按照:byte0 byte1 by

判断机器大小端模式的方法

首先我们要明白啥子叫大端模式.小端模式. 大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中: 小端模式,是指数据的高位,保存在内存的高地址中,而数据的低位,保存在内存的低地址中: 大端模式和我们的逻辑有点相反,而小端模式和我们的逻辑是一致的: 对于32位的系统,他一个字长是4个字节.那么对于数据0x12345678 你可以在linux的目录下建立一个文件,将数据0x12345678输入进去,保存文件. 利用命令 od -x  filename  查看 测试结果是

C语言怎么简单测试为大小端模式

1.什么是大小端模式? 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放:这和我们的阅读习惯一致. 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低. 2.知道大小端有何用? 首先要介绍一下字节序列,所谓的字节序列就是大于或者等于两个字节类型的数据存放在

(转)大小端模式详解

int i=1; char *p=(char *)&i; if(*p==1) printf("1"); else printf("2"); 大小端存储问题,如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0.大端的话则1在i的最高地址字节处存放,char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端. 请写一个C函数,若处理器是Big_end

C 学习之大小端

题外话:如有误,请留言通知我. 大小端,是数值在内存中的排列方式:数值的高低位与内存地址的大小 的关系. 大/小端,英文Big/Little Endian. 注意:endian,就是字节序.字节存储顺序的意思,也有尾数的意思.这里取尾数的含义刚刚好,原因如下. 先说一个前提:内存地址的前xx位通常是系统保留区,用于运行内核程序.所以用户程序就从另一端开始占用 --- 这就是为什么用户程序是从高位地址开始往低位地址伸展.(另一种可能本文不考虑) 在上面的前提下,我们已知int类型的长度是4 byt

union关键字及大小端模式

1. union 关键字 union 维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在 union 中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址.例子如下: union StateMachine { char character; int number; char *str; double exp; }; 一个 union 只配置一个足够大的空间以来容纳最大长度的数据成员,以上例而言,最大长度是 double 型