zoukankan      html  css  js  c++  java
  • C语言大小端判断程序

    大端模式

      所谓的大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

      例子:

      0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000

      0000440: b484 6c4e 004e ed00 0000 0000 0100 0000

      在大端模式下,前16位应该这样读: e684

      记忆方法: 地址的增长顺序与值的增长顺序相反

    小端模式

      所谓的小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

      例子:

      0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000

      0000440: b484 6c4e 004e ed00 0000 0000 0100 0000

      在小端模式下,前16位应该这样读: 84e6

      记忆方法: 地址的增长顺序与值的增长顺序相同

    版本一:

    /*
    File name	: Endian.c
    Version		: 0.0.1
    Author		: LiMing
    Date		: 2012-02-25,19:14,Saturday
    Descriptioin: Test whether the user's compute architecture is big-endian or little-endian
    
    Test environment:	Dev-C++ 5.1.0.0
    
    Test result:
    The x0 = 0x22
    The x1 = 0x11
    shows that the x86 architechture is little-endian
    
    */
    
    #include <stdio.h>
    
    union data
    {
    	int inter;
    	char ch;	
    };
    
    int main(void)
    {
    	union data c;
    	c.inter = 1;
    	if(c.ch == 1)
    		printf("The compute is little-endian.\n");
    	else
    		printf("The compute is big-endian,\n");
    		
    	getchar();
    	return 0;	
    }
    

    版本二:

    /*
    0x3839
    little endian
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    union AA
    {
            int i;
            char a[2];
    };
    
    int is_little_endian()
    {
            union check
            {
                    int i;
                    char ch;
            }c;
            c.i = 1;
    
            return (c.ch == 1);
    }
    
    int main()
    {
    	int ret;
    	union AA *p, u;
    	p = &u;
    	
    	memset(&u, 0, sizeof(union AA));
    	p->a[0] = 0x39;
    	p->a[1] = 0x38;
    	
    	printf("0x%x\n", p->i);
    	
    	if(is_little_endian())
    	{
    	    printf("little endian!\n");
    	}
    	else
    	{
    	    printf("big endian!\n");
    	}
    	
    	getchar();
    	return 0;
    }
    


    版本三: 

    /*
    File name	: endian02.c
    Version		: 0.0.1
    Author		: LiMing
    Date		: 2012-02-26,10:40,Sunday
    Descriptioin: Use keyword 'union' to test whether the user's compute architecture is big-endian or little-endian
    
    Test environment:	Dev-C++ 5.1.0.0
    
    Test result:
    
    The compute is little-endian.
    
    
    */
    
    #include <stdio.h>
    
    
    int main(void)
    {
    	short int x;
    	char x0,x1;
    	
    	x = 0x1122;
    	
    	x0 = ((char *)&x)[0];
    	x1 = ((char *)&x)[1];
    	
    	printf("The x0 = 0x%x\n",x0);
    	printf("The x1 = 0x%x\n",x1);
    		
    	getchar();
    	return 0;	
    }
    

    版本四:

    /*
    File name	: Endian01.c
    Version		: 0.0.2
    Author		: LiMing
    Date		: 2012-02-25,19:14,Saturday
    Descriptioin: Use keyword 'union' to test whether the user's compute architecture is big-endian or little-endian
    
    Test environment:	Dev-C++ 5.1.0.0
    
    Test result:
    
    The compute is little-endian.
    
    
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    union data
    {
    	short inter;
    	char ch;	
    };
    
    int main(void)
    {
    	union data c;
    	c.inter = 0x1122;
    	if(c.ch == 0x22)
    		printf("The compute is little-endian.\n");
    	else
    		printf("The compute is big-endian,\n");
    		
    	getchar();
    	return 0;	
    }
    




     

  • 相关阅读:
    Java言语与C言语有哪些不同
    只会增删改查的Java程序员该如何发展
    java“单根继承结构”
    Java编程领域你需要懂得技术名词解释
    HTTP相关工具类/协助类分享
    说说Java到底是值传递仍是引用传递
    Java自定义ClassLoader实现
    深化详细分析java的发展前景!
    2020Java面试题及答案,命中率高达90%
    Python爬虫详解,每个步骤都给你细致的讲解(附源码)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007705.html
Copyright © 2011-2022 走看看