vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
Re: Hexadezimale Darstellung von Zahlen 
Autor: Wöllmi
Datum: 12.06.04 11:14

Hi Thoro,

also Du mußt Dir das mal von den Basics an vor Augen führen.

Hexadezimalzahlen, die in Dezimalzahlen umgewandelt werden
sollen, sind entsprechend des "Zieldatentyps" evtl. 2 fach deutbar.

D.h. es gibt immer eine "Vorzeichenlose" und eine "Vorzeichebehaftete"
Betrachtungsweise. Programmierer, die von der Pieke auf das ABC,
evtl. schon unter Assembler gelernt haben, können Dir ein Lied davon
singen. "Hochsprachen" lassen einem dieses ABC schnell mal vergessen.

Beispiel:
&hFF = 255 ( Vorzeichenlos)
&hFF = -1 (Vorzeichenbehaftet)

Was ist passiert?

VB interpretiert diesen Wert als Byte. Ein Byte kann folgende
Wertebereiche umfassen:
0 ... 255         =>   &h00 .... &hFF        (ohne Vorzeichen!)
-128 ... +127     =>   &h80 .... &h7F        (mit Vorzeichen!)
Entscheidend ist für den Zieldatentyp das höchstwertige Bit!
Diese Bit stellt das Vorzeichen dar!

1 = Minus 255 Dez = &hFF = (Binär) 1111 1111
0 = Plus 127 Dez = &h7F = (Binär) 0111 1111

Das heißt also generell Achtung!
Man muß vorher wissen, wie die Hexadezimalzahl zu interprtieren ist.
Je nach Umwandlung kann es zu "bösen" Überreaschungen führen.
Dies kann Dir ja nun nicht mehr passieren

Aber achte auch auf Wertebereichsverletzungen.
Bsp. &hFFFF sieht ja aus wie eine Zahl, die in Integer passen könnte,
doch wenn Du
CInt("&hFFFF")
ausführen läßt, erhälst Du einen Fehler. Warum?

Ganz einfach: Ein Integer geht von -32768 ... + 32767
und "&hFFFF" ist vorzeichnlos betrachtet 65535 und da benötigst Du eine "Long"
korrekt wäre also:
CLng("&hFFFF")
In VB ist die Sache also etwas kompliziert, da es hier im Grunde genommen keine Vorzeichenosen Datentypen gibt.
INT, LONG, Single, Double => alles Vorzeichenbehaftete Datentypen.
Ausnahme "Byte" wird von 0..255 interpretiert.
Und noch toller wird es, wenn Du die Hexadezimalzahlen nicht entsprechend des Datentyps vollständig ausformulierst.

D.h.
15 Dezimal => paßt in Integer => &hF => &h000F
kann aber auch als Long abgebildet werden &h0000000F
oder in Byte &h0F.

Je nach Castoperator erhälst Du also unterschiedliche Dezimalergebnisse.

Merke: Wisse immer welcher Datentyp in der Quelle verborgen ist!
Du mußt Dich selber bemühen, daß ein korrektes Ergebnis rauskommt!


Hier ein Beispiel für die korrekte Umwandlung einer Hexadezimal in Dezimal
für den Wertebereich "Integer"!
Function fkt_iHex2Int(sData As String) As Integer
    '
    'Umwandlung eines Hexadezimalwertes "0000" bis "FFFF"
    'in einen Integer-Dezimalwert unter Berücksichtigung
    'des zulässingen Wertebereichs von -32768 bis + 32767
    '
    Dim lngDezimalZahl As Long
 
    'Ein Integer kann hexadezimal max. 4 Stellen umfassen!
    'Da &hFFFF vorzeichenlos 65535 ergibt muß mit
    '"CLng" umgeformt werden!
    lngDezimalZahl = CLng("&h" & Right$("0000" & sData, 4))
 
    Select Case lngDezimalZahl
       Case Is > 32767
          'größter zulässiger INT-Wert von 32767
          'wurde überschritten!
          'Korrektur erforderlich!
          lngDezimalZahl = lngDezimalZahl - 65536
    End Select
 
    fkt_iHex3Int = CInt(lngDezimalZahl)
 
End Function
Für Long mußt Du natürlich gemäß des Wertevorrates genauso verfahren.

Ich hoffe es hat Dir ein wenig die Augen geöffnet und zeigt mal wieder,
daß auch ein noch so mächtiges Werkzeug (VB6) einem nicht jede
Denkarbeit abnehmen kann.
Merke: Ein Computer ist auch nur ein Mensch!

Tschaui
Woellmi

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Hexadezimale Darstellung von Zahlen2.229Thoro12.06.04 01:25
Re: Hexadezimale Darstellung von Zahlen1.760ModeratorDieter12.06.04 07:16
Re: Hexadezimale Darstellung von Zahlen1.826Thoro12.06.04 09:10
Re: Hexadezimale Darstellung von Zahlen1.935Wöllmi12.06.04 11:14
Re: Hexadezimale Darstellung von Zahlen1.933Wöllmi12.06.04 11:33
Re: Hexadezimale Darstellung von Zahlen1.815Wöllmi12.06.04 12:37
Re: Hexadezimale Darstellung von Zahlen1.762Thoro12.06.04 16:28
Re: Hexadezimale Darstellung von Zahlen2.179Wöllmi12.06.04 19:58
Funktion zum Üben und testen1.997Wöllmi12.06.04 20:01

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel