Einzelnen Beitrag anzeigen

hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#3

Byte zu Binärstring wandeln

  Alt 12. Aug 2008, 18:23
Also wenn es nur um die Ideen dazu geht, will ich hier mal ein paar Worte dazu verlieren:
Nett wäre eine weitere Spalte mit den Binärwerten ala

01001110 00000000 00000000 00000000 4E 00 00 00 N . . .

in der bei der Auswahl alle anderen zugehörigen Dastellungen markiert sind, etwa so

01001110 00000000 00000000 00000000 4E 00 00 00 N . . .

und natürlich für jede Darstellung die Editierbarkeit gegeben ist, vielleicht auch noch eine Dezimaldarstellung. Das ganze müsste man dann entweder komplett selbst zeichnen oder als richtext ausgeben. Das Umwandeln sollte kein Probelm darstellen, die Binärumwandlung kann man als mit inline deklarierte Assemblerroutine erledigen.

Hab dir mal die Wandelroutine gebastelt:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;


procedure ByteToBinary(stringstart: Pointer; const b: Byte); Register; // stringstart -> EAX, b -> EDX
label bit0_0 , bit1_0 , bit2_0 , bit3_0 , bit4_0 , bit5_0 , bit6_0 , bit7_0;
asm
        push EBX
        mov EBX, $30303030

        rcl DL, 1
        jnc bit7_0
        or EBX,$00000001
bit7_0: rcl DL, 1
        jnc bit6_0
        or EBX,$00000100
bit6_0: rcl DL, 1
        jnc bit5_0
        or EBX,$00010000
bit5_0: rcl DL, 1
        jnc bit4_0
        or EBX,$01000000
bit6_0:

        mov [EAX],EBX
        mov EBX, $30303030

        rcl DL, 1
        jnc bit3_0
        or EBX,$00000001
bit3_0: rcl DL, 1
        jnc bit2_0
        or EBX,$00000100
bit2_0: rcl DL, 1
        jnc bit1_0
        or EBX,$00010000
bit1_0: rcl DL, 1
        jnc bit0_0
        or EBX,$01000000
bit0_0:

        add EAX, 4
        mov [EAX],EBX

        pop EBX
end;


var outstr: string;
begin
  outstr :='######## ######## ######## ######## ';
  ByteToBinary(@outstr[1],$F0);
  ByteToBinary(@outstr[10],$0F);
  ByteToBinary(@outstr[19],$66);
  ByteToBinary(@outstr[28],$AA);
  outstr := outstr + IntToHex($F0,2) + ' '
                   + IntToHex($0F,2) + ' '
                   + IntToHex($66,2) + ' '
                   + IntToHex($AA,2) + ' ';
  outstr := outstr + ' '+' ' + Chr($F0)+' '+ Chr($0F)
                         +' ' + Chr($66)+' '+ Chr($AA);
  writeln(outstr);
  readln;
end.
Power is nothing without TControl
  Mit Zitat antworten Zitat