Hallo,
konkret habe ich mit der Suchfunktion nichts gefunden.
Gibt es in C# eine Funktion, die einen Binärwertzahl(Dez-Zahl) in eine Liste von Integerwerten umwandelt?
Z.B. Aus der Zahl 13 möchte ich eine Liste von Zahlen erstellen:
List<int> liste = binToListOfInt(13);
Ergebnis für liste soll sein:
{1,3,4}
Codierung:
1 = 1
2 = 2
3 = 4
4 = 8
5 = 16
...
Oder wie kann ich das anstellen, wenn die Anzahl der Bits nicht bekannt ist?
Gruß
Tilo
Ich kenne leider keine.
Aber zu Fuß geht's auch recht einfach:
private void button1_Click(object sender, EventArgs e)
{
int BinaryValue = 0x2D;
List<int> Integers = BinaryToIntegers(BinaryValue);
Ausgabe(BinaryValue, Integers);
//Ausgabe = "0x2D -> {0x20, 0x8, 0x4, 0x1}"
}
private List<int> BinaryToIntegers(int BinaryValue)
{
List<int> Integers = new List<int>();
for (int i = 0; i < 32; i++)
{
int x = 1 << i;
if (BinaryValue == (BinaryValue | x)) Integers.Add(x);
}
return Integers;
}
private void Ausgabe(int binaryValue, List<int> Integers)
{
StringBuilder sb = new StringBuilder();
sb.Append("0x" + binaryValue.ToString("X") + " -> {");
for (int i = Integers.Count - 1; i >= 0; i--)
{
if (i < Integers.Count - 1) sb.Append(", ");
sb.Append("0x" + Integers[i].ToString("X"));
}
sb.Append("}");
MessageBox.Show(sb.ToString());
}
Oder wie kann ich das anstellen, wenn die Anzahl der Bits nicht bekannt ist?
Wieso sollte die nicht bekannt sein bzw. wo ist das der Fall?
MSDN: int = struct Int32...
Aber zu Fuß geht's auch recht einfach:
Einfacher: 😉
int value = 13;
var liste = Convert.ToString(value,2).Reverse().Select((ch,i) => (ch=='1') ? i+1 : 0).Where(i => i!=0).ToList();
Um noch etwas mit Bit-Jonglierereien anzugeben 😁
var liste = Enumerable.Range(0, 32).Where(i => (value & (1 << i)) != 0).Select(i => i + 1);
Um noch etwas mit Bit-Jonglierereien anzugeben
Touché. 👍