enums - C# byte find string representation of all bits set/not set -
sorry if repeat question, tried searching couldn't find relates problem.
i have byte value in each bit (or group of bits) means something. have enum custom attribute define bits, so:
[flags] public enum config4 { [stringvalue("enable good-read beep")] goodreadbeep = 1 << 0, [stringvalue("low beeper volume")] lowbeep = 1 << 1, [stringvalue("medium beeper volume")] mediumbeep = 1 << 2, [stringvalue("low beeper frequency")] lowfrequency = 1 << 3, [stringvalue("medium beeper frequency")] mediumfrequency = 1 << 4, [stringvalue("medium beeper duration")] mediumduration = 1 << 5, [stringvalue("long beeper duration")] longduration = 1 << 6, [stringvalue("reserved")] reserved = 1 << 7 }
the catch apart these individual definitions, pairs (or groups) of bits defined else. example, (lowbeep | mediumbeep) = highbeep
.
lets have byte value 47 want find string representation to. method have implemented involves finding number of bits set in byte, iterating through bits , appending string value enum. following:
for (int = 0; < bitsset.count; i++) { answer += ((configdataholder.config4)bitsset[i]).getstringvalue() + ", "; }
this poses problem when groups of bits defined. in case mentioned above, 47 contain both mediumbeep
, lowbeep
, string representation shoud highbeep
instead of mediumbeep
, lowbeep
individually.
is there more effecient way fetch string representation of each bit set in byte considering there groups of bits mean different if individual bits set?
thanks rishi
you can use bitmasks. take @ small example here :
[flags] public enum mysettings { settinga=1, settingb=2, settingc=4, settingd=8 } class program { static void main(string[] args) { byte mysettings1 = 7; byte mysettings2 = 2; console.writeline("analyse mysetting1"); analysesettings(mysettings1); console.writeline("analyse mysetting2"); analysesettings(mysettings2); console.readkey(); } private static void analysesettings(byte mysettings) { byte maska = 1; byte maskb = 2; byte maskc = 4; byte maskd = 8; // compare bitwise , if ((mysettings & maska) == maska) { console.writeline("a selected"); } if ((mysettings & maskb) == maskb) { console.writeline("b selected"); } if ((mysettings & maskc) == maskc) { console.writeline("c selected"); } if ((mysettings & maskd) == maskd) { console.writeline("d selected"); } } }
it's pretty fast compare bitwise , can add result string builder. don't use shift operator in enum declaration, it's same.
Comments
Post a Comment