易截截图软件、单文件、免安装、纯绿色、仅160KB

linux的大小端、网络字节序问题

总结:1、80X86使用小端法,网络字节序使用大端法。
          2、二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int
                来处理, unsigned short ,unsigned short 以网络字节序处理后再拷贝到发送的buffer里
          3、结构体前后要指定 #pragma  pack(1)
对于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。
也可以说:
1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。
2.大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端。
举个简单的例子,对于整形0x12345678。它在大端法和小端法的系统内中,分别如图1所示的方式存放。
 
网络字节序
我们知道网络上的数据流是字节流,对于一个多字节数值,在进行网络传输的时候,先传递哪个字节?也就是说,当接收端收到第一个字节的时候,它是将这个字节作为高位还是低位来处理呢?
网络字节序定义:收到的第一个字节被当作高位看待,这就要求发送端发送的第一个字节应当是高位。而在发送端发送数据时,发送的第一个字节是该数字在内存中起始地址对应的字节。可见多字节数值在发送前,在内存中数值应该以大端法存放。
网络字节序说是大端字节序。
比如我们经过网络发送0x12345678这个整形,在80X86平台中,它是以小端法存放的,在发送前需要使用系统提供的htonl将其转换成大端法存放,如图2所示。

字节序测试程序
不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序。

#include <stdio.h>

#include <netinet/in.h>

int main()

{

    int i_num = 0x12345678;

    printf("[0]:0x%x\n", *((char *)&i_num + 0));


相关文档:

linux diff(differential) 命令详解

功能说明:比较文件的差异。
语  法:diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
补充 ......

Linux 下如何强制取消 NFS 目录

上週因為有一台很舊的 Linux 伺服器需重新安裝(簡稱 A
主機),因為所有資料都已經備份,且也已經確認無任何服務在這台主機了,所以也很放心的重灌了。不過,重灌了之後才發現原來 ......

Linux下安装jdk&tomcat

1.下载jdk-6u2-linux-i586-rpm.bin
2. 在当前目录输入
sh jdk-6u2-linux-i586-rpm.bin
3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议.
出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。当然要同意了,输入"y" 或 " ......

linux 字符集转换教训

linux下的字符集转换命令是iconv,我们都知道从utf8编码转换成gbk编码可以这么做:
iconv -f utf8 -t gbk aaa.dat > bbb.dat
但是,今天遇到一个问题发现对于同样的文件,不同的机器上有的能转有的不能转,很是困惑。最后发现,原来是操作系统的问题,一台是redhat,一台是solaris。在同一个操作系统上从gbk--utf8--gb ......

LoadRunner负载测试(Load Test)时监控Linux的性能

    在进行负载测试(Load Test)是要监控服务器的CPU、内存、磁盘、网络的情况。如何监控Ubuntu的情况呢。
    1、安装rstatd,sudo apt-get install rstatd,如果无法apt安装,可以下载安装。
    2、启动rpc.rstatd
    3、在LoadRunner Controller的ru ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号