Laden...

Optimierung, Umwandeln von BitArray in Long und umgekehrt

Erstellt von steffen_dec vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.060 Views
S
steffen_dec Themenstarter:in
322 Beiträge seit 2007
vor 14 Jahren
Optimierung, Umwandeln von BitArray in Long und umgekehrt

Hallo Leute,

Ich muss einen BitArray[32] in einen Long umwandeln und dann auch von Long in BitArray[32].

Könnt ihr mir sagen ob man diese Funktionen von der Performance her schneller machen kann?

Umwandeln von BitArray nach Long, ich hab alles händisch gemacht da mir da nix eingefallen ist, vielleicht gibt es da auch eine Möglichkeit ohne die Schleife?


        /// <summary>
        /// Wandelt ein BitArray in eine Long-Zahl um
        /// </summary>
        /// <param name="bitArray"></param>
        /// <returns></returns>
        private long GetLongFromBitArray(BitArray bitArray)
        {
            byte[] byteArray = new byte[bitArray.Count];
            long lRet = 0;
            for (int i = 0; i < bitArray.Count; i++)
            {
                byteArray[i] = bitArray[i] ? (byte)1 : (byte)0;
                long lMask = GetBitMask(bitArray[i], i);
                lRet = lRet | lMask;
            }
            return lRet;
        }

        /// <summary>
        /// Liefert die Bitmaske für BitOperationen
        /// </summary>
        /// <param name="blnBitValue">Bitwert gesetzt oder nicht</param>
        /// <param name="intBitIndex">Index des Bits von 0 anfangend</param>
        /// <returns></returns>
        private long GetBitMask(bool blnBitValue, int intBitIndex)
        {
            string strTemp = "00000000000000000000000000000000";
            strTemp = strTemp.Remove(31 - intBitIndex, 1);
            strTemp = strTemp.Insert(31 - intBitIndex, blnBitValue ? "1" : "0");
            return Convert.ToInt32(strTemp, 2);
        }

Und noch von Long in BitArray:


long lngPortValue = 123;   //nur Beispiel
BitArray baInputBits = new BitArray(BitConverter.GetBytes(lngPortValue));

Vielen Dank im Voraus.
Steffen

S
248 Beiträge seit 2008
vor 14 Jahren

Hallo,

zum ersten ist ein long in .NET 64 Bit groß (int wäre 32 falls du das eigentlich wolltest).

Du könntest das so realisieren:


		public static int GetInt32(BitArray array)
		{
			int[] value = new int[1];
			array.CopyTo(value, 0);
			return value[0];
		}

		public static BitArray GetBitArray(int value)
		{
			return new BitArray(BitConverter.GetBytes(value));
		}

spooky

S
steffen_dec Themenstarter:in
322 Beiträge seit 2007
vor 14 Jahren

Hallo Spooky,

vielen Dank dass hilf mir sehr weiter 👍

Gruß
Steffen