Results 1 to 10 of 10

Thread: Kent iemand een ongelimiteerde Bitstring Editor

  1. #1
    HDH
    Join Date
    Feb 2006
    Location
    regio leiden
    Posts
    91

    Kent iemand een ongelimiteerde Bitstring Editor

    Hoi,

    Kent iemand een (freeware) tool die een ASCII bitstring ('1010101') kan omzetten naar hexadecimal notatie? Er zijn wel een aantal hexedit tools beschikbaar en Excel kan ook wel wat (met BIN2HEX bijvoorbeeld), maar ze zijn allemaal gelimiteerd tot 32-bit/64-bit.

    Wat ik wil is dat de tool een bitstring omzet naar hex, ongeacht de hoeveelheid bits (bijvoorbeeld 500 bits ofzo).

    Bedankt!

  2. #2
    Counting your refs Paul-Jan's Avatar
    Join Date
    Feb 2002
    Location
    Lage Zwaluwe
    Posts
    2,159
    En nou maar wachten tot iemand de minimale hoeveelheid code die daarvoor nodig is hieronder post, met als begeleidende text "zelf programmeren is sneller dan googelen".

  3. #3
    Is zelf maken geen optie?

    Bepaal de lengte en zet zoveel maal een '0' ervoor dat het aantal karakters deelbaar is door 4.
    Vervolgens ga je per 4 karakters de bijbehorende hexadecimale waarde bepalen en plakt de uitkomsten allemaal achter elkaar.

    Om daar nu een aparte tool voor te gaan gebruiken ..... klinkt meer als de vervolgopdracht op Hello World
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  4. #4
    HDH
    Join Date
    Feb 2006
    Location
    regio leiden
    Posts
    91
    Uiteraard kan ik het zelf ook schrijven, maar als er al een tool bestaat dan hoef ik het zelf niet te doen. Ik heb nog andere dingen te doen
    Maar ja, deze 'post' schrijven kost me ook tijd. Ondertussen had ik het al gedaan kunnen hebben. Ik wacht verdere reacties af.

  5. #5
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Simpelweg een kwestie van herhaaldelijk de 32/64 bits variants aanroepen? Wel ff uitkijken met het restje.

  6. #6
    HDH
    Join Date
    Feb 2006
    Location
    regio leiden
    Posts
    91
    Laat maar zitten, ik heb zelf al wat in elkaar gezet. Het koste me niet meer dan 10 minuten.
    Hier de code, geen commentaar aub Ik heb het simpel gehouden met 2 editboxes en een button.

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var InStr:String;
     OutStr:String;
     tmpStr:String;
     I,J,nibbles:Integer;
    begin
      InStr := Edit1.Text;
      I := Length(InStr) mod 4;
    
      // align to multiple of 4 bits
      case I of
      1:InStr:=InStr+'000';
      2:InStr:=InStr+'00';
      3:InStr:=InStr+'0';
      end;
    
      nibbles:=Length(InStr) div 4;
      for J := 0 to nibbles-1 do
      begin
    
        tmpStr:=Copy(InStr,J*4+1,4);
        I:=StrToInt(tmpStr);
    
        case I of
        0:   OutStr:=OutStr+'0';
        1:   OutStr:=OutStr+'1';
        10:  OutStr:=OutStr+'2';
        11:  OutStr:=OutStr+'3';
        100: OutStr:=OutStr+'4';
        101: OutStr:=OutStr+'5';
        110: OutStr:=OutStr+'6';
        111: OutStr:=OutStr+'7';
        1000:OutStr:=OutStr+'8';
        1001:OutStr:=OutStr+'9';
        1010:OutStr:=OutStr+'A';
        1011:OutStr:=OutStr+'B';
        1100:OutStr:=OutStr+'C';
        1101:OutStr:=OutStr+'D';
        1110:OutStr:=OutStr+'E';
        1111:OutStr:=OutStr+'F';
        end;
    
      end;
    
      Edit2.Text := OutStr;
    end;

  7. #7
    Quote Originally Posted by HDH View Post
    ....geen commentaar aub...
    ok, dan zal ik je ook niet vertellen dat je de extra nullen niet aan de achterkant maar aan de voorkant van de string moet plakken
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Waarom verander je getallen naar strings? Met getallen kan je rekenen, en zo lastig is het ook weer niet (ongetest

    Code:
    const hextab='0123456789abcedf';
    j:=length(str);
    setlength(result,(j+3) div 4); // delen door 4 omhoog afronden 
    w :=length(result);
    while (j>0) do
      begin   
        // bereken aantal digits in deze doorgang
        if j>3 then  
          l:=4        // max 4 digits per keer
         else
          l:=j;       // minder dan 4? Dan de laatste run.
        n:=0;
        for i:=0 to l-1 do
          begin 
            n:=n shl 1;
            n:=n+ord(s[j-l+i]-#48);    // #48= '0',  '0'-'0'=0  '1'-'0'=1  
          end;  
        result[w]:=hextab[n+1]; // n=0 -> hextab[1]
        dec(w); // 1 nibble geoutput
        dec(j,l); // l bits geprocessed.    
      end;
    Indien je strings miljoenen of tientallen miljoenen bits lang zijn, dan is nog wel wat opimalizatie mogelijk.

  9. #9
    HDH
    Join Date
    Feb 2006
    Location
    regio leiden
    Posts
    91
    Henske: je hebt inderdaad gelijk. Echter in mijn geval moet ik het op deze manier doen.
    De bitstring data is namelijk een bitstream en wordt ergens halverwege afgekapt. Dan moet ik het even opvullen tot een complete nibble (of eigenlijk nog beter: tot een hele byte).

    Voorbeeld: de data die ik binnen krijg = '0000 1111 0000 11', van links naar rechts.
    Dit moet dan in hex worden: 0F 0C

  10. #10
    Stijn Sanders develyoy's Avatar
    Join Date
    Jun 2008
    Location
    GentBrugge, Belgi?½
    Posts
    1,046
    Ik had ooit eens TBits ontdekt (in de Classes unit denk ik), misschien is dat handig?
    (Ik heb het hier gebruikt)

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
  •