Binär in Hexadizmal
hallo,
könntet ihr mir bitte helfen((habs erst seit paar tage :( , brauche es für die Schule :wall: )), 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 |
Re: Binär in Hexadizmal
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 |
Re: Binär in Hexadizmal
Dazu must du schonmal die Größe festlegen (wieviel Bytes sind eine Zahl)...
Dezimal in Hexadizimal => IntToHex (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 And und nen Vergleich ev. noch Shr Shl je nach umsetzung... Binär in Dezimal ist auch nicht viel schwierieger, ebenfalls nur Shl / Shr und ein simples Or... Oder universal nach dem Vorschlag von Inherited :zwinker: Dafür brachst du dann vor allem Div und Mod und ein Array für die Darstellungen nach Wert... Da solltest du dir dann aber noch UpperCase, LowerCase anschauen. Für den Umgang mit dem Array brauchst du dann wohl noch High, Low und Length, 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); |
Re: Binär in Hexadizmal
Zitat:
Delphi-Quellcode:
Const
cDisplay: Array Of Char[ 0..15 ] = '0123456789abcdef'; |
Re: Binär in Hexadizmal
also so läuft es :)
:gruebel: aber nur das ich es mit einer for oder while schleife machen soll..... :gruebel: und in der hilfe kann ich nicht nachschauen, da windows vista die nicht unterstützt..:-( |
Re: Binär in Hexadizmal
Zitat:
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:
Viel Spass
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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