1,若要将一个C类的网络19217120划分为14个子网

前三个字节不动 后面一个字节拿出4bit来做网络号就可以
192.17.12.0 这就是一个网段了 不能划分

若要将一个C类的网络19217120划分为14个子网

2,什么是字节序JVM采用哪种字节序

你好!JAVA里面,使用 java.io.DataOutputStream 的 void writeInt(int v) 写一个int,再看看生成的16进制就知道。希望对你有所帮助,望采纳。
1、字节序:即字节的顺序。字节数组或是IO时候的字节对象都是有序的。2、字节跟实际编码方式有关,同样的值,不同的编码方式得到的字节值也是不一样的。编码方式有很多种,像GBK、Unicode、Latin编码等,Java内部统一采用Unicode编码,保证了国际字符的通用性。这些多少有点深入了,我认为楼主还需要再看些基础书籍再来理解还好些。
JAVA里面,使用 java.io.DataOutputStream 的 void writeInt(int v) 写一个int,再看看生成的16进制就知道。

什么是字节序JVM采用哪种字节序

3,网络协议的三个要素是什么

网络协议的三个基本要素是语法、语义、同步。语法即用户数据与控制信息的结构和格式;语义即需要发出控制信息,以及完成的动作与做出的响应;时序即对事件实现顺序的详细说明。语法、语义、同步。语法,确定通信双方“如何讲”,定义了数据格式,编码和信号电平等。语义,确定通信双方“讲什么”,定义了用于协调同步和差错处理等控制信息。同步,确定通信双方“讲话的次序”,定义了速度匹配和排序等。网络协议为计算机网络 中进行数据交换而建立的规则、标准或约定的集合。例如,网络中一个微机用户和一个大型主机 的操作员进行通信,由于这两个数据终端所用字符集 不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。当然,对于不相容终端,除了需变换字符集字符外还需转换其他特性,如显示格式、行长、行数、屏幕 滚动方式 等也需作相应的变换。

网络协议的三个要素是什么

4,关于高字节和低字节的问题

高低字节是相对而言的,如11101010,从右到左为由低字节到高字节,也就是说,左边的是高字节,右边的是低字节(仍然是相对而言的,没有绝对的界限)。当ASCII值小于127的时候,系统会将整型变量的高字节置0、低字节存放该字符的ASCII值。这是因为从低位开始放数据(ASCII值),还没到高位,数据就完整表示了,根本不需要再使用高字节位,但是系统又不容许它为空,所以就给0 咯。
1. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。2. 基于x86平台的pc机是小端字节序的,而有的嵌入式平台则是大端字节序的。因而对int、uint16、uint32等多于1字节类型的数据,在这些嵌入式平台上应该变换其存储顺序。通常认为,在空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字节序转换为主机字节序。

5,CC 网络编程字节序的问题

恩。基本上是这个意思。htons表示short类型的数据由主机字节序转为网络字节序。而ntohs表示是网络字节序转换到主机字节序。因为历史的原因网络字节序约定为大端(bigedian),而主机字节序位则依据CPU的类型各有不同,我们普通的intel处理器为小端,而powerpc等一些处理器则是大端。那么从主机出去的数据到网络上例如是INTEL,那是要转换的。所以你这个无论是服务器还是客户端,只要是出去的数据都是要经过htonxx这样的函数转换。如果是接收呢,则是要通过ntohxx这样的函数转换的。设置端口由于是面向网络操作,所以也是要使用htons转换的。
你这个问题我看没有几个人能真正的回答你,这个不是一般人所能为的,也不是一下两下就能写出来的。另外c及c++编译后是直接生成的机器码,而java编译后生成的是二进制的字节码,需要jvm来解释成机器码来执行,也就是说java多了中间一步,要生成字节码,当然了这也正是它的夸平台性的一个主要方面。从字节码上转的话需要很了解jvm指令以及机器码指令,如果从语义,语法上去转的话,就需要非常精通两种语言,这不是常人所能及的,估计让java的发明者去做可能也要一些人和一些时间的。

6,谁能帮忙解释一下 主机字节次序和网络字节次序

网络字节序与主机字节序 不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 最常见的有两种 1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址 LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 低位值小,就应该放在内存地址小的地方,也即内存地址低位 反之,高位值就应该放在内存地址大的地方,也即内存地址高位 BE big-endian 最直观的字节序 地址低位存储值的高位 地址高位存储值的低位 为什么说直观,不要考虑对应关系 只需要把内存地址从左到右按照由低到高的顺序写出 把值按照通常的高位到低位的顺序写出 两者对照,一个字节一个字节的填充进去 例子:在内存中双字0x01020304(DWORD)的存储方式 内存地址 4000 4001 4002 4003 LE 04 03 02 01 BE 01 02 03 04 例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为 big-endian little-endian 0x0000 0x12 0xcd 0x0001 0x23 0xab 0x0002 0xab 0x34 0x0003 0xcd 0x12 x86系列CPU都是little-endian的字节序. 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 为了进行转换 bsd socket提供了转换的函数 有下面四个 htons 把unsigned short类型从主机序转换到网络序 htonl 把unsigned long类型从主机序转换到网络序 ntohs 把unsigned short类型从网络序转换到主机序 ntohl 把unsigned long类型从网络序转换到主机序 在使用little endian的系统中 这些函数会把字节序进行转换 在使用big endian类型的系统中 这些函数会定义成空宏 同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug.

7,不同体系结构的处理器有big endian和little endian 模式哪位能告诉我

Big Endian 和 Little Endian [转] powerpc 发表于 2005-5-5 15:25:00 谈到字节序的问题,必然牵涉到两大CPU派系。那就是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是 little endian呢? 其实big endian是指低地址存放最高有效字节(MSB),而little endian则是低地址存放最低有效字节(LSB)。 用文字说明可能比较抽象,下面用图像加以说明。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示: Big Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 12 | 34 | 56 | 78 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Little Endian 低地址 高地址 -----------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 78 | 56 | 34 | 12 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 从上面两图可以看出,采用big endian方式存储数据是符合我们人类的思维习惯的。而little endian,!@#$%^&*,见鬼去吧 -_-||| 为什么要注意字节序的问题呢?你可能这么问。当然,如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。但是,如果你的程序要跟别人的程序产生交互呢?在这里我想说说两种语言。C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而 JAVA编写的程序则唯一采用big endian方式来存储数据。试想,如果你用C/C++语言在x86平台下编写的程序跟别人的JAVA程序互通时会产生什么结果?就拿上面的0x12345678来说,你的程序传递给别人的一个数据,将指向0x12345678的指针传给了JAVA程序,由于JAVA 采取big endian方式存储数据,很自然的它会将你的数据翻译为0x78563412。什么?竟然变成另外一个数字了?是的,就是这种后果。因此,在你的C程序传给JAVA程序之前有必要进行字节序的转换工作。 无独有偶,所有网络协议也都是采用big endian的方式来传输数据的。所以有时我们也会把big endian方式称之为网络字节序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。ANSI C中提供了下面四个转换字节序的宏。 ·BE和LE一文的补完 我在8月9号的《Big Endian和Little Endian》一文中谈了字节序的问题,原文见上面的超级链接。可是有朋友仍然会问,CPU存储一个字节的数据时其字节内的8个比特之间的顺序是否也有big endian和little endian之分?或者说是否有比特序的不同? 实际上,这个比特序是同样存在的。下面以数字0xB4(10110100)用图加以说明。 Big Endian msb lsb ----------------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Little Endian lsb msb ----------------------------------------------> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 实际上,由于CPU存储数据操作的最小单位是一个字节,其内部的比特序是什么样对我们的程序来说是一个黑盒子。也就是说,你给我一个指向0xB4这个数的指针,对于big endian方式的CPU来说,它是从左往右依次读取这个数的8个比特;而对于little endian方式的CPU来说,则正好相反,是从右往左依次读取这个数的8个比特。而我们的程序通过这个指针访问后得到的数就是0xB4,字节内部的比特序对于程序来说是不可见的,其实这点对于单机上的字节序来说也是一样的。 那可能有人又会问,如果是网络传输呢?会不会出问题?是不是也要通过什么函数转换一下比特序?嗯,这个问题提得很好。假设little endian方式的CPU要传给big endian方式CPU一个字节的话,其本身在传输之前会在本地就读出这个8比特的数,然后再按照网络字节序的顺序来传输这8个比特,这样的话到了接收端不会出现任何问题。而假如要传输一个32比特的数的话,由于这个数在littel endian方存储时占了4个字节,而网络传输是以字节为单位进行的,little endian方的CPU读出第一个字节后发送,实际上这个字节是原数的LSB,到了接收方反倒成了MSB从而发生混乱。

文章TAG:网络字节序网络  字节序  一个  
下一篇