• 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;	
    }
    




     

  • 相关阅读:
    一元多项式的运算
    单链表逆转
    字符串函数
    历届试题 错误票据
    不用循环,不用递归,输出1~1000的整数
    sql三维数据
    SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问 (也就是跨数据库访问出错)
    由于服务器意外的断电,导致SQL SERVER服务器上数据库出现“置疑”而无法使用,
    关于delphi7的四舍五入
    关于delphi exit 继承
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007706.html
Copyright © 2020-2023  润新知