c# - 位标志到 int C#
问题描述
我正在使用一个 Web API,我需要传入一个对应于位标志的 int 值。如何计算要传入的 int 值?例如,如果我想要选项 B、选项 E 和选项 F - 对应的 int 值是什么?
还请再举几个例子,比如我只想要选项 G。或者如果我想要 D 和 E。
[Flags] public enum Includes
{
OptionA = 1 << 0,
OptionB = 1 << 1,
OptionC = 1 << 2,
OptionD = 1 << 3,
OptionE = 1 << 4,
OptionF = 1 << 5,
OptionG = 1 << 6,
OptionH = 1 << 7
}
int includes = ????
解决方案
如何计算要传入的 int 值?
通过使用按位或,以同样的方式工作:
int seven = 1|2|4;
因为在二进制中,1 是 0001,2 是 0010,4 是 0100,当它们一起进行 OR 运算时,它们变成 0111 (7)
选项 B、选项 E 和选项 F
int bef = (int)(Includes.OptionB | Includes.OptionE | Includes.OptionF);
你可以想象你需要为其他人使用的模式。你或他们的顺序无关紧要
为了解码一个数字,我们使用与 & 类似的技巧:
if(bef & Includes.OptionB == Includes.OptionB)
有一个帮助方法 Enum.HasFlag 你也可以使用
推荐阅读
- excel - vba 有没有办法在其中均匀分配值?
- d3.js - 数据可视化仅适用于条形图中的第一个条形
- apache - RedirectMatch 301 删除 URL 参数
- sql - 外键关系总和并处理空值
- apache-kafka - 卡夫卡:选举新领导人的基于群体的方法?
- javascript - slideToggle()jquery期间的异常填充/边距
- python - 以原始句子中出现的顺序提取所有匹配的子字符串
- javascript - 使用 javascript 和 python flask webserver 抓取实时数据时的性能问题
- python - 通过 django 中的中间件重新路由请求
- java - 在swagger上测试PUT操作,得到PreparedStatementCallback;糟糕的 SQL 语法