Results 1 to 7 of 7

Thread: Integer naar TBits

  1. #1

    Integer naar TBits

    Bestaat er al een functie om een Integer (252) om te zetten naar TBits?

    Ik probeer wat data weg te shrijven en te lezen als integer/hex - maar ik wil nu het cijfer 252 (Integer) (11111100) omzetten naar een TBits, alleen vind ik wel hoe ik een integer kan omzetten naar een bitstring maar niet naar TBits..

    [Edit]
    Ik doe het nu zo - maar weet niet of dit een goede manier is of er een betere manier is?

    Delphi Code:
    1. procedure IntegerToBits(Int: Integer; var Bits: TBits);
    2.   var
    3.     I : Integer;
    4.   begin
    5.     Bits.Size := SizeOf(Int) * 8;
    6.     for I := 1 to Bits.Size do begin
    7.       if ((Int shl (I-1)) shr Bits.Size -1) = 0 then
    8.       begin
    9.         Bits[I -1] := False;
    10.       end else
    11.       begin
    12.         Bits[I -1] := True;
    13.       end;
    14.     end;
    15.   end;
    Last edited by Reidinga; 15-Aug-20 at 22:47.

  2. #2
    Mag je een TBits niet gewoon casten?

    Tb := TBits(UInt32);

    Andersom mag het volgens mij wel volgens https://www.thetopsites.net/article/50438669.shtml
    Dus terug zou ook moeten kunnen.

  3. #3
    Ik zou niet weten hoe.. ik krijg een acces violation zodra ik die TBits probeer uit te lezen als ik die cast..

  4. #4
    Niet getest maar werkt dit wel?

    Delphi Code:
    1. type
    2.   TPrivateAccessBits = class
    3.   public
    4.     FSize: Integer;
    5.     FBits: Pointer;
    6.   end;
    7.  
    8. //...
    9.  
    10. var
    11.   Tb: TBits;
    12.   Value: UInt32;
    13. begin
    14.   Value := 123456;
    15.   Tb := TBits.Create;
    16.   Tb.Size := SizeOf(Value);
    17.   Move(Value, TPrivateAccessBits(Tb).FBits^, SizeOf(Value));

    Anders is de enige mogelijkheid inderdaad bit voor bit te zetten.

    TBits.FBit is een pointer naar memory waar de bits opgeslagen zijn. En ze zijn als Bytes opgeslagen dus dit doet een Move van UInt32 over de FBit heen.

    Je moet zelf even testen of de TBits.Bits array hierna inderdaad goed gevuld is.

  5. #5
    Dankjewel ga ik eens testen - doe het nu heel vuil (dec to string) en dan lees ik de string[1] = '1'. Maar ik wil het graag op de "juiste" manier doen..

  6. #6
    Wat wil je precies? Waar gebruik je TBits precies voor?

    Er zijn routines zat voor BinToInt(string) en IntToBin(int):String etc.

  7. #7
    Nou ik heb een arduino, die ik geprogrammeerd heb als een elm327 simulator, zo hoef ik niet steeds naar de auto te lopen. De instellingen sla ik op in het eeprom van de arduino, omdat de meeste instellingen bool zijn, schrijf ik dit weg in een bitstring en stuur deze over de seriële poort - waarna de arduino deze wegschrijft.

    Op deze manier bespaar ik ruimte - tegenover dat ik elke bool los als 0/1 zou weg schrijven (1 byte). Daarvoor gebruik ik de TBits dus omdat ik een lijst met pid’s heb die ondersteund of niet zijn. Dit gaat over een 50 tal true false waarden.
    Door die in een tbits te zetten kan ik die makkelijk uitlezen en wegschrijven

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •