我需要将一个 bit[] 转换为表示 bit[] 中每个位的字符串 []
本文关键字:bit 表示 字符串 转换 一个 | 更新日期: 2023-09-27 18:35:42
我正在研究一个自动跟进系统,使用高度过时的技术来注册"项目"的当前状态,该系统中的GUI交互使用名为"标志"的东西,用户可以"检查"这些标志来指定项目的当前状态。可以选中 11 个可能的框,系统接受多项选择。
例如,用户可以选中标有"已确认"和/或"需要跟进"和/或"已安排"和/或"与客户交谈"的复选框(有 11 种可能的选项)。
这就是问题所在 - 编写此内容的人将这些选择以"位和"的形式保存到数据库中,因此您看到的是复选框选择的原始 bit[] 的整数。
我需要做的是从数据库中读取整数并将其转换回 11 个值的位数组 1 || 0 然后我需要从该位数组中确定选中哪些字符串值框以确定天气是否我需要执行自动跟进。
所以基本上如果选中"已确认",我不想跟进如果检查"需要跟进",我需要跟进。
这里的问题是可能存在多个选择。
因此,在int变成bit[]之后,例如
1,0,1,0,0,0,1,1,1,0,1,其中每个 int 表示选中的框。
我需要找到一种方法将上述内容转换为表示框标签的字符串数组,以确定选中了哪些框。
在 C# 中执行此操作的常用方法是使用标志枚举 - 这正是您的位字段。
[Flags]
enum ProjectStatus
{
Confirmed = 1,
NeedsFollowUp = 2,
SpokenWithClient = 4,
....
}
要测试是否设置了特定标志,请执行以下操作:
ProjectStatus status = (ProjectStatus)intFromDb;
if( ( status & ProjectStatus.Confirmed ) == ProjectStatus.Confirmed )
// the Confirmed flag is set
如果您使用的是 .NET 4 或更高版本,则还有一种Enum.HasFlags
扩展方法可以简化此操作。
如果您不希望这样做,您可以通过执行以下操作来了解位置 x
处的位是否设置:
bool isSet = ( intFromDb & ( 1 << x ) ) != 0;
并用它来构建你的字符串。
编辑:我还建议您阅读一些有关按位运算符及其作用的信息。这可能是一个好的开始:http://blackwasp.co.uk/CSharpLogicalBitwiseOps.aspx