精华内容
下载资源
问答
  • 判断大端小端函数

    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() ...

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

    展开全文
  • 大端:指的是一个整数的高位字节存放在内存的低地址处 小端:指的是一个整数的低位字节存放在内存的低地址处 ...//判断大端或者小端 void IsPort() { union { short int a;//短整型两个字节 char b[size...

    大端:指的是一个整数的高位字节存放在内存的低地址处

    小端:指的是一个整数的低位字节存放在内存的低地址处

    现代PC大多采用的是小端字节序,又称为主机字节序,而网络中传输数据时使用的是大端字节序,又称为网络字节序

    如何判断大小端呢?代码如下:

    //判断大端或者小端
    void IsPort()
    {
    	union 
    	{
    		short int a;//短整型两个字节
    		char b[sizeof(short int)];
    	}values;
    
    	values.a = 0x0102;
    	if(values.b[0] == 0x1 && values.b[1] ==0x2)
    	{
    		printf("this is big\n");
    	}
    	else if(values.b[0] == 0x2 && values.b[1] == 0x1)
    	{
    		printf("this is little\n");
    		
    	}
    	else
    	{
    		printf("unknown........\n");
    	
    	}
    }
    bool IsBig()
    {
    	union 
    	{
    		short int a;//短整型两个字节
    		char b;
    	}values;
    
    	values.a = 0x1234;
    	if(values.b == 0x12)
    	{
    		return true;
    	}
    	return false;
    }
    bool IsBig1()
    {
    	int a = 0x1234;
    	char b = *(char*)&a;
    
    	if(b == 0x12)
    	{
    		return true;
    	}
    	return false;
    }
    
    
    int main()
    {
    
    /*IsPort();
    	if(IsBig1())
    	{
    		printf("this is big\n");
    	}
    	else
    	{
    		printf("this is little\n");
    	}*/
    }

    模拟hton函数将小端转为大端,代码如下:

    /*
    先判断a是否是本机字节序 如果是本机字节序才需要转 逆序即可 处理单位为字节
    0x12345678---->0x78563412
    */
    long htons(long a)
    {
    	long b = 0;
    	if(IsBig())
    		return a;
    
    	for(int i = 0 ; i < sizeof(a);++i)
    	{
    		b = (b<<8) | (a & 0xff);
    		a >>= 8;
    	}
    	return b;
    }

    判断一个合法的ip地址,代码如下:

    bool IsIpv4( char *str)
    {
    	char *ptr;
    	int count = 0;
    	char *p = str;
    	while(*p != '\0')
    	{
    		if(*p == '.')
    			count++;
    		if(count > 3)//一旦'.'点数大于3就为非法
    			return false;
    		p++;
    	}
    	count = 0;
    	ptr = strtok(str,".");
    
    	while(ptr != NULL)
    	{
    		count++;//控制切割次数
    		//出现负号 坐着开始以01开头 非法
    		if((ptr[0] == '-') || (ptr[0] == '0' && ptr[1] == '1') )
    			return false;
    		//将切割的每个部分转换成整数
    		int a = atoi(ptr);
    		//如果第一次切割后第一部分为0  不能以0开头 非法
    		if(count == 1 && a == 0) return false;//第一次分割出来的不能为0  以0开头不是合法的地址
    		//数字不再0-255之间也为非法
    		if(a < 0 || a > 255)
    			return false;
    		//下一次切割
    		ptr = strtok(NULL,".");
    	}
    	//切割四次才正确
    	if(count == 4)	
    		return true;
    	else 
    		return false;
    }
    
    int main()
    {
    
    	char buf[100];
    	while(cin>>buf,buf[0] != '#')
    	{	
    		if(IsIpv4(buf))
    		{
    			cout<<"合法"<<endl; 
    		}
    		else
    		{
    			cout<<"非法"<<endl; 
    		}
    	}
    	
    }

     

     

    展开全文
  • #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

    展开全文
  • 判断大端小端模式的简单代码 bool is_big_endian() { int n = 0x1122; return (*(char*)&n == 0x11); } 大端:高低低高 网络字节序是大端 x86是小端

    判断大端小端模式的简单代码

    bool is_big_endian()
    {
    	int n = 0x1122;
    	return (*(char*)&n == 0x11);
    }
    

    大端:高低低高
    网络字节序是大端
    x86是小端

    展开全文
  • 详解大端 小端函数判断及转换)

    千次阅读 2013-05-18 12:59:54
     关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋
  • 判断大端小端

    2013-10-25 09:15:35
    大端模式(Big_endian):字数据的高字节...小端模式(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节则存放 在低地址中。 int i=1;   char *p=(char *)&i;   if(*p==1)   printf("1")
  • 判断大端小端

    2010-10-12 19:36:00
    <br />int i=1;...  大小存储问题,如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0.大端的话则1在i的最高地址字节处存放,char是一个字节,所
  • c语言判断大端小端

    2015-05-27 16:31:04
    请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 int checkCPU( ){{union w{ int a;char b;} c;c.a = 1;return(c.b ==1);} }
  • 大端小端判断

    2020-11-26 22:22:08
    用联合体判断大端小端 #include<stdio.h> union un { int a; char b; }u; void main() { u.a = 1;//既赋值给 printf("%d\n", u.b); //a 0000 0000 0000 0000 0000 0000 0000 0001 //b 0000
  • C笔试题(判断大端小端模式)

    千次阅读 2011-08-20 08:27:49
    C笔试题 (判断大端小端模式) 试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 解答: int checkCPU( ) {  {  union w  {
  • 判断大端小端模式

    2009-12-02 21:33:00
    试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答: int checkCPU( ){ { union w { 
  • 例如:数字1在内存中存储的方式分为两种:[00 00 00 01] 大端字节序[01 00 00 00] 小端字节序 一、使用指针判断:#include<stdio.h>int check_sys(){int n = 1;if (1 == *(char *)&n){return 1;}else{...
  • 大端小端模式判断

    2017-10-20 22:48:45
    大端小端模式
  • 试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 解答: int checkCPU( ) {  {  union w  {   int a;  char
  • 这里需要考虑存储模式:大端模式和小端模式。 大端模式(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 输出为0x39380000 小端模式(Little_endian):字数据的高字节存储在高地址...
  • 利用大小·模式数据存放的顺序不同以及...判断函数如下:void JudgeEndianness(void) { union { int x; char x0; }u={.x=0x11223344}; //初始化联合体中的成员整形数据x if(u.x0 == 0x11) printf("小端模式");
  • 试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1解答: int checkCPU( ){ { union w { int a; char b;
  • 大端小端

    2018-11-16 10:05:00
    由于某个问题,最近突然联想到大端小端问题, 时间久远,记忆有点模糊,所以又重新翻看了一下,做个记录,内容大都来源伟大的互联网。。。。。。 1. 大端小端概念 大端小端其实是我们通俗意义上的叫法,实际上...
  • 大端小端数据读取

    千次阅读 2017-05-10 15:22:01
    错误原因就是涉及到大端小端数据读取方式的问题,下面就是将这部分内容做一总结。什么是大端小端大小模式就是存储数据时,数据的高低位是怎么存储在地址的高低位上。 大端模式(Most Significant Byte,MSB):...
  • 大端小端总结

    2019-01-26 16:25:57
    前言 单词endian意思为字节存储次序。 大端: BigEndian,是指数据的高位字节保存在内存中的低地址中,即数据按照从高位到低位,依次往内存地址填充(内存地址...假设有整形数据0x12345678,其大端小端存储次序如下...
  • 轻松记住大端小端的含义(附对大端小端的解释)  或许你曾经仔细了解过什么是大端小端,也动手编写了测试手头上的机器上是大端还是小端的程序,甚至还编写了大端小端转换程序;但过了一段时间之后,当你再看到...
  • ARM存储格式之 大端小端http://blog.csdn.net/asda56/article/details/36919809 我们知道在内存中数据是以字节为单位进行存储的,每个地址单元对应着一个字节(byte),一个字节为8位(bite)。但是很多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,369
精华内容 2,947
关键字:

判断大端小端函数