编程-Byte order & Bit order
https://mp.weixin.qq.com/s/B9rKps4YsLiDTBkRks8rmQ
看到比特序和字节序放在一起被提及,想必就已经填补了概念拼图里面缺失的那一块了,这一块正是比特序。
一直以来,接触到最多的就是字节序:
大端字节序:big-endian byte order;
小端字节序:little-endian byte order;
网络字节序:network byte order;
大小端字节序转换:
/* 大端字节序 */
i = (data[]<<) | (data[]<<) | (data[]<<) | (data[]<<);
/* 小端字节序 */
i = (data[]<<) | (data[]<<) | (data[]<<) | (data[]<<);
网络字节序转换:
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
是不是很熟悉?
见多识广的想必也见过这个(from linux kernel include/uapi/linux/tcp.h ):
struct tcphdr {
__be16 source;
__be16 dest;
__be32 seq;
__be32 ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u16 res1:,
doff:,
fin:,
syn:,
rst:,
psh:,
ack:,
urg:,
ece:,
cwr:;
#elif defined(__BIG_ENDIAN_BITFIELD)
__u16 doff:,
res1:,
cwr:,
ece:,
urg:,
ack:,
psh:,
rst:,
syn:,
fin:;
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
__be16 window;
__sum16 check;
__be16 urg_ptr;
};
明显跟我们之前见到的以字节为单位进行转换的不同,这里是以bit为单位;
不深究的话,可能看到BIG_ENDIAN和LITTLE_ENDIAN还有下面的 "Adjust your <asm/byteorder.h> defines" ,就觉得是byte order的变种,也理解成byteorder就行了。
如果知道bit order的概念,就知道这是两个不同的概念了。
PS. 关于上面tcphdr的定义:
1. 条件编译的宏是 :
__LITTLE_ENDIAN_BITFIELD
__BIG_ENDIAN_BITFIELD
意思是比特域的大小端,和字节序大小端是分开的:
__LITTLE_ENDIAN
__BIG_ENDIAN
2. 下面的#error又说是byteorder,
#error "Adjust your <asm/byteorder.h> defines"
是否矛盾?这里的情况是,linux kernel中把字节序和比特序都放在byteorder.h里面定义。这里只说调整这个头文件的定义,并没有说调整字节序的定义,所以应该没问题。
include/uapi/linux/byteorder/big_endian.h 中的定义:
#ifndef _UAPI_LINUX_BYTEORDER_BIG_ENDIAN_H
#define _UAPI_LINUX_BYTEORDER_BIG_ENDIAN_H #ifndef __BIG_ENDIAN
#define __BIG_ENDIAN 4321
#endif
#ifndef __BIG_ENDIAN_BITFIELD
#define __BIG_ENDIAN_BITFIELD
#endif
编程-Byte order & Bit order的更多相关文章
- Mysql Order By 注入总结
前言 最近在做一些漏洞盒子后台项目的总结,在盒子多期众测项目中,发现注入类的漏洞占比较大.其中Order By注入型的漏洞也占挺大一部分比例,这类漏洞也是白帽子乐意提交的类型(奖金高.被过滤概率小). ...
- 分别针对Customers表与Order表的通用查询操作
1.针对customers表通用的查询操作 CustomerForQuery package com.aff.PreparedStatement; import java.lang.reflect.F ...
- Morris post order traversal algorithm
Sept. 5, 2015 花时间把代码读明白, 比光看书强. 动手写代码, 改代码, 兴趣是最好的老师. 多记几个例子, 增加情趣. 举个例子关于中序遍历, 4 ...
- SQL入门语句之ORDER BY 和GROUP BY
一.SQL入门语句之ORDER BY ORDER BY 是用来基于一个或多个列按升序或降序顺序排列数据 1.从数据库表获取全部数据按字段A的升序排列 select *from table_name o ...
- Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum
Scalaz是由一堆的typeclass组成.每一个typeclass具备自己特殊的功能.用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上.scala这个 ...
- BizTalk开发系列(十二) Schema设计之Group与Order
开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...
- Mysql 下 Insert、Update、Delete、Order By、Group By注入
Insert: 语法:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) 报错注入: insert into test(id,name,p ...
- Order to Cash Process
order to cash process steps can be listed as below · Enter the Sales Order · Book the Sales Order · ...
- Oracle Order Management DropShip Flow for R12
Oracle Order Management DropShip Flow for R12 Email ThisBlogThis!Share to TwitterShare to FacebookSh ...
随机推荐
- 麦基数(p1045)
描述: \(计算2^{P}−1的位数和最后500位数字(用十进制高精度数表示)\) Ⅰ.求位数 \(因为2^p最后一位必定不为0,求2^p-1的位数也就是求2^p位数\) \(2^p的位数确实很难求, ...
- 计算机组成及系统结构-第十章 输入输出(I/O)系统
输入输出(I/O)系统 一.概述 1.输入输出设备的编址 2.设备控制器(I/O接口)的基本功能 3.I/O设备数据传送控制方式 二.程序中断输入输出方式 1.中断的定义 2.中断的作用 3.中断的产 ...
- 缓冲 buffer 和缓存 cache 的区别
缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取. 缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后 ...
- 一篇文章根治各种HR面的套路问题,文章给出参考答案
引 IT 行业更重要的是技术面. HR 面只是最后一道把关, 检查这个应聘者是否存在一些 "致命缺陷". 所以整体的面试过程, 大家要保持不卑不亢, 淡定从容, 条理清晰, 沉着稳 ...
- mysql数据库如何修改密码及权限分配
如何修改Mysql密码 Mysql用户密码采用md5加密函数加密(单向加密) SELECT PASSWORD('root'); -- *81F5E21E35407D884A6CD4A731AEBFB6 ...
- 2018-06-24 js BOM对象
BOM对象: Browser Object Model 即浏览器对象模型: 包含: window:窗口对象 alert();//警示框 confirm();//确认框 prompt();//输入提示框 ...
- 黑马程序员_毕向东_Java基础视频教程——进制转换之负数二进制(随笔)
进制转换之负数二进制 负数的二进制表现形式 6 = 110 -6 : 其实就是 6 的二进制取反再 + 1 一个整数在内存中是占 4 个字节 **取反:将二进制里的 1 变成 0,0 变成 1. 以6 ...
- .Net(c#)使用 Kafka 小结
.Net(c#)使用 Kafka 小结 1.开篇 由于项目中必须使用 kafka 来作为消息组件,所以使用 kafka 有一段时间了.不得不感叹 kafka 是一个相当优秀的消息系统.下面直接对使用过 ...
- spark机器学习从0到1基本的统计工具之(三)
给定一个数据集,数据分析师一般会先观察一下数据集的基本情况,称之为汇总统计或者概要性统计.一般的概要性统计用于概括一系列观测值,包括位置或集中趋势(比如算术平均值.中位数.众数和四分位均值),展型 ...
- DRF版本组件
1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...