从inet_pton()看大小端字节序

时间:2022-09-03 10:49:03
#include<stdio.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h> int main(){
char * str=(char *)malloc();
char * p="0.0.0.1"; struct sockaddr_in servaddr;
bzero(&servaddr,sizeof(servaddr));
inet_pton(AF_INET,p,&servaddr.sin_addr); printf("0.0.0.1 converted to decimal %u\n",servaddr.sin_addr);
sprintf(str,"%u",servaddr.sin_addr);
printf("decimal converted to string %s\n",str);
int *pnt=(int *)str;
printf("string converted to decimal array %u\n",*pnt);
free(str);
return;
}

运行结果如下

0.0.0.1  converted to decimal
decimal converted to string
string converted to decimal array

0.0.0.1 的二进制表示是00000000 00000000 00000000 00000001

16777216 的二进制表示是00000001 00000000 00000000 00000000

由此可见,0.0.0.1是按 big endian 字节序存储的。

有一点需要明确,无论big/little endian, int或其他任何>=1B的变量的读取必然是由高到低读取)。另外,堆栈的增长是自高向低地址方向增长的,所以,0.0.0.1只有按如下方式存储才会被解释为16777216。
----stack高地址---00000001---00000000---00000000---00000000---stack低地址-----

同理,926365233 的解释:
'1677'占4个byte,正好被解释为一个整数,而 926365233(decimal)= 00110111 00110111 00110110 00110001(binary) ='7761'(ascii)
显然,上面也是一个大端字节序。

本程序算是一箭双雕解释了大小端字节序。另外,从apue上借鉴了一下 union方法判断字节序的方法,贴在下面,其实和上文异曲同工,

#include<stdio.h>
#include<stdlib.h> int checkCPU( )
{
{
union w
{
int a;
char b;
} c;
c.a = ;
return(c.b ==);
}
} int main(){ if(checkCPU()==){
printf("big end");
} return;
}

从inet_pton()看大小端字节序的更多相关文章

  1. 大小端&comma;&quot&semi;字节序&quot&semi;

    2 字节序 2.1 字节 字节(Byte)作为计算机世界的计量单位,和大家手中的人民币多少多少“元”一个意思.反正,到了计算机的世界,说字节就对了,使用人家的基本计量单位,这是入乡随俗. 比如,一个电 ...

  2. &lbrack;C&sol;C&plus;&plus;&rsqb;大小端字节序转换程序

    计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式). 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿 ...

  3. linux kernel如何处理大端小端字节序

    (转)http://blog.csdn.net/skyflying2012/article/details/43771179 最近在做将kernel由小端处理器(arm)向大端处理器(ppc)的移植的 ...

  4. 写一个c程序辨别系统是大端or小端字节序

    字节序有两种表示方法:大端字节序(big ending),小端字节序(little  ending) 看一个unsigned short 数据,它占2个字节,给它赋值0x1234.若采用的大端字节序, ...

  5. 大端字节序&amp&semi;小端字节序(网络字节序&amp&semi;主机字节序)

    大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序 ...

  6. C语言 大小端 字节对齐

    参考:http://www.cnblogs.com/graphics/archive/2011/04/22/2010662.html 1. 大端序:数据的高位字节存放在地址的低端,低位字节存放在地址的 ...

  7. c&sol;c&plus;&plus;字节序转换(转)

    字节序(byte order)关系到多字节整数(short/int16.int/int32,int64)和浮点数的各字节在内存中的存放顺序.字节序分为两种:小端字节序(little endian)和大 ...

  8. linux的大小端、网络字节序问题 &period;

    1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigne ...

  9. linux网路编程&colon;字节序&lpar;大端、小端、网络、主机&rpar;

    字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-End ...

随机推荐

  1. SQL谜题&lpar;加减符号替代&rpar;

    问题:将以下字符串”.1.2.3.4.5.6.7.8.9 = 1“中的符号点(.)更改为符号加(+)或符号(-),有多少种方法?请用SQL解决此问题 计算过程: CREATE TABLE #(VAL ...

  2. 【转】&lbrack;退役&rsqb;纪念我的ACM——headacher&commat;XDU

    转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了.虽然很舍不得,但这段回忆很值得纪念 ...

  3. Ubuntu 14&period;04 上使用 Nginx 部署 Laravel

    本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...

  4. JS逻辑运算大于小于比较

    遇到这个问题,结果测试了好半天终于发现原因, 例子: var az = $('#a').css('zIndex'); // 1001 var bz = $('#b').css('zIndex'); / ...

  5. css边框内圆角

    一.使用两个元素实现 html <div class="parent"> <div class="inset-radius">时代峰峻胜 ...

  6. Java面试知识点之线程篇(三)

    前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...

  7. MySQL入门详解(三)---mysql如何进行主从配置

    基本要求 两台服务器(windows,linux,mac) 双方mysql版本需一致,如不一致,只要主节点低于从节点 两台服务器防火墙关闭 双方数据库所用的用户,要具有远程访问的权限 主服务器配置 修 ...

  8. nginx反向代理tomcat应用,struts2网站程序redirect时导致请求地址错误的解决方法

    一个使用struts2的网站在登录页面需要进行redirect跳转,大致如下: <package name="admin" extends="httl-defaul ...

  9. ssh远程执行nohup命令不退出

    https://blog.csdn.net/oneinmore/article/details/50073443

  10. 学习JQuery - 10

    第四章 Styling and Animating 1. 使用内联属性修改CSS 我们知道HTML在onload时会读取css的各项值. 那么,我们能不能在之后的操作中改变css值呢? 答案是肯定的! ...