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程序,它可以测试不同平台上的字节序。
1
#include <stdio.h>
2
#include <netinet/in.h>
3
int main()
4
{
5
int i_num = 0x12345678;
6
printf("[0]:0x%x\n", *((char *)&i_num + 0));
7
相关文档:
上週因為有一台很舊的 Linux 伺服器需重新安裝(簡稱 A
主機),因為所有資料都已經備份,且也已經確認無任何服務在這台主機了,所以也很放心的重灌了。不過,重灌了之後才發現原來 ......
以下是个人觉得比较详细而且易于理解的几篇文章,所以把它一起贴出来做为笔记(一)、(二)、(三),也希望对过路者提供一点方便。
第3章文件I / O
3.1 引言
本章开始讨论U N I X系统,先说明可用的文件I / O函数——打开文件、读文件、写文件等等。大多数U N I ......
摘要:
本文讲述的时进程管理的基本概念和进程管理工具介绍;文中的重点对进程管理工具的分类介绍及应用举例,包括 ps、pgrep、top
、kill、pkill、killall、nice和renice 等工具。
http://www.linuxsir.org/main/?q=node/210
1、程序和进程;
程序是为了完成某种任务而设计的软件,比如OpenOffice是程序。什么是进程 ......
LINUX常用命令(基础)
1. man 对你熟悉或不熟悉的命令提供帮助解释
eg:man ls 就可以查看ls相关的用法
注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。
2. ls 查看目录或者文件的属*,列举出任一目录下面的文件
eg: ls /usr/man
ls -l
a.d表示目录(directory),如果是一个"-"表示是文件,如果 ......
在进行负载测试(Load Test)是要监控服务器的CPU、内存、磁盘、网络的情况。如何监控Ubuntu的情况呢。
1、安装rstatd,sudo apt-get install rstatd,如果无法apt安装,可以下载安装。
2、启动rpc.rstatd
3、在LoadRunner Controller的ru ......