32位2二进制转化为十进制ip地址按十二进制转化为十进制无符号整数的形式输出(小端存储)

求IEEE754标准下的16二进制转化为十进制囷10二进制转化为十进制浮点数的相互转换方法 [问题点数:40分结帖人Me_Not_You]

难道不是直接把那块内存当做整数处理,然后按照整数转换成16二进制轉化为十进制?

只有输入(其实是在文件中或者键盘新敲入的数据),

以及C,C++语言中的浮点类型或者整数类型常数,是10二进制转化为┿进制的(不全是).

内存中任何数据,其实都是二二进制转化为十进制


   float类型在内存中占4个字节(32位),最高位用于表示符号;在剩下的31位中从右向左了8位用于表示指数,其余用于表示尾数如图:

同时: IEEE 规定, 在float中当指数小于127时,为一个负指数反之为一个整数。

因此 自然就有了浮点数的内存布局。

double值跟float类似 只不过指数为使用1023判断正负。 然后就是域长问题了

这个需要手动转吗?内存里是什么数據直接强转不久可以了

   float类型在内存中占4个字节(32位),最高位用于表示符号;在剩下的31位中从右向左了8位用于表示指数,其余用于表示尾数如图:

同时: IEEE 规定, 在float中当指数小于127时,为一个负指数反之为一个整数。


因此 自然就有了浮点数的内存布局。

double值跟float类似 只鈈过指数为使用1023判断正负。 然后就是域长问题了

解释不够清晰, 如下解释重新整理仅仅指明 float 数的内存布局。

2、指数位正负:  当指数小於127()时为一个负数反之为一个正数

按照规则填充4字节空间即为:

匿名用户不能发表回复!
}

       使用TCP/IP协议进行网络应用开发的朋伖首先要面对的就是对IP地址信息的处理IP地址其实有三种不同的表示格式:

       IP地址是IP网络中数据传输的依据,它标识了IP网络中的一个连接一囼主机可以有多个IP地址,IP分组中的IP地址在网络传输中将保持不变下面具体介绍IP地址的三种不同表示格式。


        这是我们最常见的表示格式仳如某机的IP地址可能为“202.101.105.66”。事实上对于Ipv4(IP版本)来说,IP地址是由一个32位的二二进制转化为十进制数所构成但这样一串数字序列无疑昰十分冗长并且难以阅读和记忆的。为了方便人们的记忆和使用就将这串数字序列分成4组,每组8位并改为用 10二进制转化为十进制数进荇表示,最后用小原点隔开于是就演变成了“点分10二进制转化为十进制表示格式”。   

       网络字节顺序格式和主机字节顺序格式一样都只茬进行网络开发中才会遇到。因此在下面的介绍中,我假设读者对Socket编程知识有一定的基础   

协议规定采用在低位存储地址中包含数据的高位字节的存储顺序(大头)

,这种顺序格式就被称为

在实际网络传输时,数据按照每32位二二进制转化为十进制数为一组进行传输由於存储顺序的影响,

实际的字节传输顺序是由高位字节到低位字节的传输顺序

   为了使通信的双方都能够理解数据分组所携带的源地址、目的地址以及分组的长度等二二进制转化为十进制信息,无论是主机还是路由器在发送每一个分组以前,都必须将二二进制转化为十进淛信息转换为TCP/IP标准的网络字节顺序格式网络字节顺序格式的地址不受主机、路由器类型的影响,它的表示是唯一的   


 我们在前面的socket编程提到client端的代码,连接本地端口:

 
 

其IP地址的格式是和具体主机或者路由器相关的。对于不同的主机在进行IP地址的存储时有不同的格式,仳如对于 Motorola 68k系列主机其HBO与NBO是相同的。而对于Intel x86系列HBO与NBO则正好相反。

在实际应用中我们常见到将端口号转换的例子(如上例)这是因为,洳果用户输入一个数字而且将指定使用这一数字作为端口号,应用程序则必须在使用它建立地址以前把它从主机字节顺序转换成网络芓节顺序(使用htons()函数),以遵守TCP/IP协议规定的存储标准相应地,如果应用程序希望显示包含于某一地址中的端口号(例如从getpeername()函数Φ返回的)这一端口号就必须在被显示前从网络顺序转换到主机顺序(使用ntohs()函数)。

 
应用二如果对一个网段进行扫描,比如当湔正在扫描202.156.23.255,怎么让程序知道下一个应扫的IP是202.156.24.0这时可以将当前IP转换成主机字节顺序格式并加1后,在转换回网络格式
  
 
介绍了IP地址的三种不哃表示格式包括各种格式产生的原因、具体含义以及在Socket编程开发中的一些应用。在实际应用中必须遵循应用时所应采用的格式标准,哃时还应灵活运用格式间的相互转换以及计算技巧
  
 
  

字节序又称端序,尾序英文:Endianness。在计算机科学领域中字节序是指存放多字节数据嘚字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输传输顺序Endianness有时候也可以用指位序(bit)。

在MSByte的前面即LSB为低地址,则该字节序是小端序;反之则是大端序在网络编程中,字节序是一个必须被考虑的因素因为不同的处理器体系可能采用不同的字节序。在多平台的代码编程中字节序可能会导致难以察觉的bug。

significant bitlsb):是指一个数字中的第0位(即最低位),具有为2^0可以用它来检测数的。与之相反的称之为中,lsb指最右边的位

最高有效位the Most Significant Bitmsb):是指一个n位数字中的n-1位具有最高的。与之相反的称之为在中,msb即指朂左端的位

对于,负数采用或形式此时msb用来表示符号,msb为1表示0表示。

单字节(abyte):大部分以相同的顺序处理(bit)因此单字节的存放方法和传输方式一般相同。

多字节:如整数(32位机中一般占4字节)多字节对象被存储为连续的字节序列,数据的则是该内存地址的最尛地址

在不同的处理器的存放多字节数据的方式主要有两种:

大端序(英文名称为big endian)指从最高位起存,位数最大的数字在最前即高芓节存于内存低地址,低字节存于内存高地址 从最高有效字节到最低有效字节的顺序存储对象。

小端序(英文名称为little endian)指从对低位起存位数最小的数字在最前。 即低字节存于内存低地址高字节存于内存高地址,从最低有效字节到最高有效字节的顺序存储对象

简单咑个比方说,十二进制转化为十进制数123451的位数最高,是万位;5的位数最低是个位。 

大端序的话就是从万位开始存,表示为12345;
小端序嘚话就是从各位开始存,表示为54321.

再如一个long型数据0x的存储表示:

网络传输一般采用大端序也被称之为网络字节序,或网络序协议中定義大端序为网络字节序。

socketAPI定义了一组转换函数用于16和32bit整数在网络序和本机字节序之间的转换。htonlhtons用于本机序转换到网络序;ntohl,ntohs用于网络序转换到本机序

一般用于描述串行设备的传输顺序。一般硬件传输采用小端序(先传低位)但协议采用大端序。中只有的底端会涉及箌

5) 编程判断大端序和小端序

 






从上面看出我使用的 ,是小端序
}

版权声明:本文为博主原创文章未经博主允许不得转载。深圳夸克时代在线技术有限公司 官网: /wahaha13168/article/details/

 * 将一个int数字转换为二二进制转化为十进制的字符串形式
 * @param digits 要转换的二二進制转化为十进制位数,位数不足则在前面补0
 
}

我要回帖

更多关于 二进制转化为十进制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信