AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Binär in Hexadizmal

Ein Thema von Arthur · begonnen am 18. Sep 2007 · letzter Beitrag vom 18. Sep 2007
Antwort Antwort
Arthur

Registriert seit: 17. Sep 2007
2 Beiträge
 
Delphi 7 Personal
 
#1

Binär in Hexadizmal

  Alt 18. Sep 2007, 17:58
hallo,
könntet ihr mir bitte helfen((habs erst seit paar tage , brauche es für die Schule )), wie man
-Dezimal in hexadezimal
-Binär in Hexadezimal
-Binär in Dezimal
-hexadezimal in binär
-hexadezimal in Dezimal
schreibt

also es sollte so aussehen wie das hier:
----------------------------
Dezimal in Binär

bin:= '';
dez:= strtoint(Edit1.text);
while dez <> 0 do
begin
R:= dez mod 2;
bin:= IntToStr(R)+bin;
dez:= dez div 2;
end;
Label1.caption:= bin;
----------------------------
mit FOR DO und While DO
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Binär in Hexadizmal

  Alt 18. Sep 2007, 18:10
Schau dir mal folgende Seite an, dort wird für jedes Zahlensystem erklärt wie man das umrechnet:
http://www.arndt-bruenner.de/mathe/s...lensysteme.htm
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Binär in Hexadizmal

  Alt 18. Sep 2007, 18:13
Dazu must du schonmal die Größe festlegen (wieviel Bytes sind eine Zahl)...

Dezimal in Hexadizimal => Delphi-Referenz durchsuchenIntToHex (Funktion)
Hexadezimal in Dezimal => teste doch mal StrToInt( '$ff' )

Damit hast du schonmal alles nötige für Hexadezimal und Dezimal, fehlt ja nur noch Binär...

Für die umwndlung in Binär brauchst du nicht viel mehr als Delphi-Referenz durchsuchenAnd und nen Vergleich ev. noch Delphi-Referenz durchsuchenShr Delphi-Referenz durchsuchenShl je nach umsetzung...

Binär in Dezimal ist auch nicht viel schwierieger, ebenfalls nur Delphi-Referenz durchsuchenShl / Delphi-Referenz durchsuchenShr und ein simples Or...

Oder universal nach dem Vorschlag von Inherited
Dafür brachst du dann vor allem Delphi-Referenz durchsuchenDiv und Delphi-Referenz durchsuchenMod und ein Array für die Darstellungen nach Wert...

Da solltest du dir dann aber noch Delphi-Referenz durchsuchenUpperCase, Delphi-Referenz durchsuchenLowerCase anschauen.
Für den Umgang mit dem Array brauchst du dann wohl noch Delphi-Referenz durchsuchenHigh, Delphi-Referenz durchsuchenLow und Delphi-Referenz durchsuchenLength, um es in einer Schleife benutzen zu können...

z.b.:
Delphi-Quellcode:
Const
  cDisplay: Array Of Char[ 0..15 ] = ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' );

Bye Christian

Edit: Tipfehler beseitigt (Thx Muetze1);
Christian
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Binär in Hexadizmal

  Alt 18. Sep 2007, 18:39
Zitat von Kedariodakon:
Delphi-Quellcode:
Const
  cDisplay: Array Of Char[ 0..15 ] = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ];
Das zweite sollen runde Klammern sein und keine eckigen und es gibt davon eine Kurzform:

Delphi-Quellcode:
Const
  cDisplay: Array Of Char[ 0..15 ] = '0123456789abcdef';
  Mit Zitat antworten Zitat
Arthur

Registriert seit: 17. Sep 2007
2 Beiträge
 
Delphi 7 Personal
 
#5

Re: Binär in Hexadizmal

  Alt 18. Sep 2007, 18:45
also so läuft es
aber nur das ich es mit einer for oder while schleife machen soll.....
und in der hilfe kann ich nicht nachschauen, da windows vista die nicht unterstützt..
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Binär in Hexadizmal

  Alt 18. Sep 2007, 18:47
Zitat von Arthur:
also so läuft es
aber nur das ich es mit einer for oder while schleife machen soll.....
und in der hilfe kann ich nicht nachschauen, da windows vista die nicht unterstützt..
Die For / While Schleife benötigst du trotzdem...

Bye Christian

Edit:
Ich hab mal ein wenig rumgestöbert, da ich damals ganz am Anfang zu meiner Ausbildungszeit sowas programieren mußte...
Hab jetzt einfach mal das wichtigste C&P aus dem Src, ka ob das funktionstüchtig ist, auf dem ersten Blick sollte alles bei sein.


Delphi-Quellcode:
Uses
  SysUtils, Math;

Type
  TNumeralSystem = ( nsBin, nsDec, nsHex ); // Unsere Zahlensysteme

Const
  cDisplayDigits: Array[ 0..15 ] Of Char = ( '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' ); // Buchstaben alle klein!

Function GetNSSize( Const NummeralSystem: TNumeralSystem ): Integer;
//** Wieviel Zahlen hat das System
Begin
  Case NummeralSystem Of
    nsBin: Result := 2;
    nsDec: Result := 10;
    nsHex: Result := 16;
    Else Result := -1;
  End;
End;

Function CheckNSString( Const NumeralSystemString: String; Const NummeralSystem: TNumeralSystem ): Boolean;
//** entspricht der String der Notation des Zahlensystems (Ungültige Zeichen???)
Var i: Integer;
    a: Integer;
    ConvStr: String;
    IOResult: Boolean;
Begin
  Result := False;
  If Length( NumeralSystemString ) > 0 Then Begin
    ConvStr := LowerCase( NumeralSystemString ); // Großbuchstaben zu Kleinbuchstaben wandeln
    IOResult := False;
    For i := 1 To Length( ConvStr ) Do Begin // Jedes Zeichen des übergeben Strings durchgehen
      IOResult := False;
      For a := 0 To GetNSSize( NummeralSystem ) - 1 Do Begin // cDisplayDigits durchgehen
        IOResult := ConvStr[ i ] = cDisplayDigits[ a ];
        If IOResult Then Break; // For Schleife abbrechen wenn Zeichen übereinstimmen
      End;
      If Not IOResult Then Break; // Abbrechen wenn ein Zeichen nicht gefunden wurde...
    End;
    Result := IOResult;
  End;
End;

Function GetDecValue( Const aChar: Char ): Integer;
//** Zeichen zu dezimalen Wert
Var i: Integer;
    FoundOne: Boolean;
Begin
  Result := -1;
  For i := Low( cDisplayDigits ) To High( cDisplayDigits ) Do Begin
    FoundOne := cDisplayDigits[ i ] = aChar;
    If FoundOne Then Begin
      Result := i;
      Break;
    End;
  End;
  If Not FoundOne Then Raise EConvertError.Create( 'Wert für das Numerische Zeichen: "' + aChar + '" kann nicht ermittelt werden' );
End;

Function ConvertToDec( Const SrcNumStr: String; Const SrcNumSys: TNumeralSystem ): Int64;
//** Konvertiert eine Zahl eines Systems zu einer Dezimalzahl
Var ConvStr: String;
    Len: Integer;
    i: Integer;
    NV: Int64;
Begin
  If SrcNumSys <> nsDec Then Begin // Nur aufwendig konvertieren, wenn Anfangssystem nicht Dezimal
    Result := 0;
    ConvStr := LowerCase( SrcNumStr ); // Großbuchstaben zu Kleinbuchstaben wandeln
    Len := Length( ConvStr );
    For i := 0 To Len - 1 Do Begin
      NV := Trunc( IntPower( GetNSSize( SrcNumSys ), i ) ); // passende Potentz ermitteln
      Result := Result + ( GetDecValue( ConvStr[ Len - i ] ) * NV ); // Wert ausrechnen und zum Ergebniss hinzufügen...
    End;
  End Else Begin
    Result := StrToInt64( SrcNumStr );
  End;
End;

Function NumeralSystemConvert( Const SrcNumStr: String; Const SrcNumSys, DestNumSys: TNumeralSystem ): String;
//** Konvertiert eine Zahl eines Systems in ein anderes Zahlensystem
Var ConvStr: String;
    DecConv: Int64;
    DestP: Integer;
Begin
  Result := '';
  ConvStr := LowerCase( SrcNumStr ); // Großbuchstaben zu Kleinbuchstaben wandeln
  If CheckNSString( ConvStr, SrcNumSys ) Then Begin
    If Not ( SrcNumSys = DestNumSys ) Then Begin
      Try
        DecConv := ConvertToDec( ConvStr, SrcNumSys );
        If DestNumSys <> nsDec Then Begin // Wir haben schon ein dezimales Ergebniss, deshalb nur bei nicht dezimalen Zielsystem berechnen...
          DestP := GetNSSize( DestNumSys );
          While DecConv <> 0 Do Begin
            Result := cDisplayDigits[ DecConv Mod DestP ] + Result;
            DecConv := DecConv Div DestP;
          End;
        End Else Begin
          Result := IntToStr( DecConv );
        End;
      Except
        On Error: Exception Do Begin
          Result := 'ERROR: "' + Error.Message + '"';
        End;
      End;
    End Else Begin
      Result := ConvStr; // gleiches Zahlensystem brauch nicht umgewandelt werden...
    End;
  End Else Begin
    Result := 'ERROR: Zeichenfolge konnte wegen ungültiger Zeichen nicht umgerechnet werden.';
  End;
End;
Viel Spass
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz