字节排序函数

考虑一个16位整数,它由2个字节组成。内存中存储这2个字节有2种方法:

一种是将低序字节存储在起始地址,称为小端(little-endian)字节序

另一种方法是将高序字节存储在起始地址,称为大端(big-endian)字节序

我们把系统所采用的字节序称为主机自己序(host byte order)

#include	"unp.h"

int
main(int argc, char **argv)
{
	union {
	  short  s;
          char   c[sizeof(short)];
    } un;

	un.s = 0x0102;
	printf("%s: ", CPU_VENDOR_OS);
	if (sizeof(short) == 2) {
		if (un.c[0] == 1 && un.c[1] == 2)
			printf("big-endian\n");
		else if (un.c[0] == 2 && un.c[1] == 1)
			printf("little-endian\n");
		else
			printf("unknown\n");
	} else
		printf("sizeof(short) = %d\n", sizeof(short));

	exit(0);
}

当一个短整数变量中存放2个字节的值0x0102,然后查看它的两个连续字节c[0]和c[1],以此确定字节序

字符串CPU_VENDOR_OS标识CPU类型、厂家和操作系统版本

既然网络协议必须指定一个网络字节序(network byte order),作为网络编程人员必须清楚不同字节序的差异

网际协议使用大端字节序来传送这些多字节整数

主机字节序和网络字节序的转换:

h:host

n:network

s:short

l:long

返回网络字节序的函数:

uint16_t htons(uint16_t host16bitvalue);

uint32_t htonl(uint32_t host32bitvalue);

返回主机字节序的函数:

uint16_t ntohs(uint16_t net16bitvalue);

uint32_t ntohl(uint32_t net32bitvalue);

因特网标准中另一个重要的约定就是位序

最左边的位是最早出现的最高有效位

注意位序的编号是从0开始的,分配给最高有效位的编号是0

时间: 2024-08-04 18:34:45

字节排序函数的相关文章

UNIX网络编程第3章套接字编程简介3.2套接字地址结构3.3值结果参数3.4字节排序函数

1: #include <iostream> 2: #include "../lib/unpsunyj.h" 3: 4: int main(int argc, char **argv) 5: { 6: union { 7: short s; 8: char c[sizeof(short)]; 9: } un; 10:   11: un.s = 0x0103; 12: std::cout << "un.s =: " << un.s

模仿qsort() 实现一个通用排序函数:msort()

github:  https://github.com/youker-lxy/msort 截图: 对测试模块不是很了解,以下测试函数未实现: test_msort.c  测试 msort.c 的所有函数 test_generate_data.c  测试 generate_data.c 的所有函数 程序中只产生了int类型的随机数据并排序,未进行其他类型的排序. 总结: 1 通用排序函数实现: qsort()采用快排算法,传入参数为:数组首地址, 左侧下标, 右侧下标, 数组元素大小,  以及传入

网络与主机字节转换函数:htons ntohs htonl ntohl

网络与主机字节转换函数:htons ntohs htonl ntohl 网络字节序: 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型.操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释.网络字节顺序采用big endian(大端)排序方式. 注:网络字节序转化为主机字节序时,一定要注意是否需要转换.网络字节序是确定的. 大端与小端 大端:低地址存高位 —— 网络字节序/主机字节序 小端:高地址存低位 —— 主机字节序 网络字节序一定是大端的(网络上传输

算法学习 - STL的p排序函数(sort)使用

排序函数sort() 这个函数是STL自带的,功能很强大~ 这里教下使用方法. sort()有三个参数,第一个是排序的起始位置,第二个是排序的结束位置,第三个是排序的判断函数.函数原型为: sort(<#_RandomAccessIterator __first#>, <#_RandomAccessIterator __last#>, <#_Compare __comp#>) 这个就是原型了~ 使用方法 首先假设我们有一个vector<int> vec;向量

C/C++排序函数

在应用中,如果我们不需要自己来编写排序函数的话,可以通过C/C++中已经实现的库函数来完成排序任务. 一.sort函数 sort函数在C++中<algorithm>中,若要使用,需要加上头文件#include <algorithm>,它有如下几种形式: (1)默认情况按升序排列: 假设数组为a[n],下标从0开始,对整个数组按升序排列: int a[110], n; //n表示元素个数 sort(a, a+n); //整个数组按升序排列 (2)若要将某个区间的元素排列,比如需要将第

泛型编程与C++标准模板库 : 浅谈sort()排序函数

以前用sort排序的时候,只知道sort函数有如下两种重载方式. template< class RandomIt > void sort( RandomIt first, RandomIt last ); template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); 当时对这些参数也不是很懂,只知道一些简单的用法. 1).比如: 如下代码可以使

python 自定义排序函数

自定义排序函数 Python内置的 sorted()函数可对list进行排序: >>>sorted([36, 5, 12, 9, 21]) [5, 9, 12, 21, 36] 但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1.如果 x 和 y 相等,返回 0. 因此,如果我们要实现倒序排序,只需要编写一个reversed_c

各种排序函数(摘)

sort的应用: 1.可以传入两个参数: sort(a,a+N) ,其中a是数组,a+N表示对a[0]至a[N-1]的N个数进行排序(默认从小到大排序): 2.传入三个参数: sort(a,a+N,cmp),第三个参数是一个函数 : 如果让函数从大到小排序,可以用如下算法实现: bool cmp(int a,int b){return a>b}; sort(A,A+N,cmp); 分排序函数函数:partial_sort: 例如,你现有一 个包含Widget对象(Widget意为“小挂件”)的v

hive分组排序函数 分组取top10

hive分组排序函数 分组取top10 语法:row_number() over( partition by 字段a order by 计算项b desc) rank --这里rank是别名 Partition by:类似hive的建表,分区的意思 这里按字段a分区,对计算项b进行降序排序 实例: 要取top10品牌,各品牌的top10渠道,各品牌的top10渠道中各渠道的top10档期 1) 取top10品牌 Select 品牌,count/sum/其他() as num from tb_na