它其实是IP报文头中的一个字段,因为TCP、UDP协议,应用层协议大部分都是封装在IP包中的,所以分析这些协议时,就会经常看到这个字段。
标识字段有3位。
Reserved bit:1位,是保留位,一般用不上;
Don't fragment :1位,用来表示数据包是否分片(Not set表示数据包没有分片);
More fragment:1位,用来表示是否是最后一个片段(Not set表示是最后一个)。
flags的意思:是名词或者动词。意思是:旗帜;国旗;信号旗,标志旗;菖蒲,鸢尾;铺路用的厚石板(多为矩形或正方形);(在街上慈善捐赠后获得的)小纸徽;(用作标志的)旗状装置(或符号、图画);出租车空车显示器;特征位;旗舰 复数 flags;第三人称单数 flags;现在分词 flagging
词汇搭配:zero flag [计] 零标志 零旗标 零标记 零标志位 Rising Flag 上升旗形 升起旗帜Trailing Flag [计] 结束标志 结束标志
词语用法:flag的意思是“旗”“旗帜”,主要指作为“标志”的具体的旗,如国旗、军旗、校旗、团旗、队旗等,也可指交通、天气预报等的信号旗,一般呈长方形,一边通常固定在杆或绳上,旗面多饰有图案或文字。flag是可数名词。flag有时也可指“报刊的报头”。flag可用作定语修饰其他名词。
haul down one's flag的意思是“妥协”“投降”“认输”,keep the flag flying的意思是“坚持战斗”“不屈服”。
很多android源码中有一个int flags定义形式的变量,还有与之相对应的一系列常量,这种flag分类方式应该可以用在任何语言中。
int flags定义包含的flag,可能有多个,这是需求。
而一个int型的值(当然也可以是其他类型,原理一样)在java里表示4 byte也就是32 bit,除去符号位剩下31个标志位可以表示31个单独的flag,他们相或可以生成更多的flags值。
用1进行左移 *** 作可以方便生成不同的flag如下:
public static final int FLAG1= 1<<0
public static final int FLAG2 = 1<<2
。。。
public static final int FLAG31 = 1<<31
相或如
public static final int FLAGa = FLAG3|FLAG5|FLAG8
当需要判断时:
flags = FLAGX1 |FLAGX2
//若flags的相或item包含FLAGX 则与其相与刚好得到FLAGX
if((flags&FLAGX ) == FLAGX ){
//说明包含FLAGX 属性
}
简单封装成函数:
public boolean hasFeature(int feature){
if((flags&feature) == feature) return true
return false
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)