Laden...

Zahl (addierte Binärwerte) in List<int> umwandeln?

Erstellt von TiloS vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.599 Views
T
TiloS Themenstarter:in
35 Beiträge seit 2012
vor 11 Jahren
Zahl (addierte Binärwerte) in List<int> umwandeln?

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

C
224 Beiträge seit 2009
vor 11 Jahren

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());
        }

C
224 Beiträge seit 2009
vor 11 Jahren

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...

2.891 Beiträge seit 2004
vor 11 Jahren

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();

C
224 Beiträge seit 2009
vor 11 Jahren

Hi dN!3L, die Vereinfachung ist Spitze 👍:-D

5.742 Beiträge seit 2007
vor 11 Jahren

Um noch etwas mit Bit-Jonglierereien anzugeben 😁


var liste = Enumerable.Range(0, 32).Where(i => (value & (1 << i)) != 0).Select(i => i + 1);

2.891 Beiträge seit 2004
vor 11 Jahren

Um noch etwas mit Bit-Jonglierereien anzugeben

Touché. 👍

T
TiloS Themenstarter:in
35 Beiträge seit 2012
vor 11 Jahren

Alles klar, vielen Dank.