PowerShell 技能连载 - 管理比特标志位(第一部分)
有时候您会需要处理比特标志位值。一个数字中的每个比特代表一个特定的设置,并且您的代码可能需要决定一个标志位是否置位,而不能影响别的比特。
这常常需要一系列位操作。然而在 PowerShell 5 中,有一个简单得多的办法——标志位枚举。
假设有一个值 56823,并且希望知道哪个比特是置位的。您需要将该数字转换成可视化的比特:
1 | PS C:\> [Convert]::ToString(56823, 2) |
如果您了解每个比特的意义,那么一个更强大的方法是定义一个枚举:
1 | #requires -Version 5 |
对每个比特提供一个友好的名字,并且记得添加属性 [Flags]
(这将允许设置多个值)。
现在要解析这个十进制值非常简单——只需要将它转换成新定义的枚举类型:
1 | $rawflags = 56823 |
这时得到的结果:
1 | PS C:\> $flags |
如果您只希望检测某个标志位是否置位,请使用 HasFlag()
方法:
1 | PS C:\> $flags.HasFlag([CustomBitFlags]::Option1) |
PowerShell 技能连载 - 管理比特标志位(第一部分)
http://blog.vichamp.com/2017/03/03/managing-bit-flags-part-1/