Entwickler-Ecke
Internet / Netzwerk - Funktion htonl bringt Fehlermeldung
Burgunder - Mi 07.01.09 12:14
Titel: Funktion htonl bringt Fehlermeldung
Hallo Leute,
ich versuche in Delphi 4 einen Code zu erstellen, wo Daten plattformunabhängig ausgetauscht werden können.
Mit der Funktion htons habe ich keine Probleme, aber htonl bringt regelmäßig eine Meldung, dass eine Bereichsüberschreitung stattgefunden hat, obwohl es nicht so ist.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TfrmMain.Button2Click(Sender: TObject); Var XI:LongWord; YI: LongInt; begin YI := -952065; ShowMessage(IntToStr(YI)); ShowMessage(IntToStr(LongWord(YI))); XI:= htonl(LongWord(YI)); end; |
Bei der letzten Zeile knallt es immer. Ich habe YI auch schon als Integer und XI als Cardinal definiert. Hat aber alles nichts gebracht. Auch wenn ich das Casting in eine unsigned Zahl unterlassse, bekomme ich dieselben Effekte. Was mache ich falsch?
Kann mir jemand helfen?
Vielen Dank für Eure Unterstützung Julia
Moderiert von
Narses: Delphi-Tags hinzugefügt
Xentar - Mi 07.01.09 12:20
Ich denke mal, dass der Fehler durch das
Delphi-Quelltext
1:
| XI:= htonl(LongWord(YI)); |
entsteht.
Ein LongWord kann halt keine negativen Zahlen.
Auch wenn ich htonl nicht kenne: Lass den Typecast zum longword an der Stelle weg, und mach das, wenn überhaupt nötig, erst mit dem Ergebnis.
Burgunder - Mi 07.01.09 12:31
Hallo Xentar,
meines Wissens nach geht diese Funktion htonl wie auch htons, ntohl und ntohs nur mit vorzeichenlosen Zahlen, deswegen das Casting in Longword. Das sollte jedoch kein Problem sein, da sowohl integer als auch longword 4 Byte lang sind.
Auch wenn ich das Casting weglasse, gibt es die Fehlermeldung.
Gruß Julia
Xentar - Mi 07.01.09 12:36
Ich zitier mich mal selbst ;)
Xentar hat folgendes geschrieben : |
Auch wenn ich htonl nicht kenne: Lass den Typecast zum longword an der Stelle weg, und mach das, wenn überhaupt nötig, erst mit dem Ergebnis. |
Also:
Delphi-Quelltext
1:
| XI:= longword(htonl(YI)); |
Burgunder - Mi 07.01.09 12:53
Hallo Xentar,
vielen vielen dank für die Hilfe!!!! Das war die Lösung. Wäre nicht allein darauf gekommen.
Viele Grüße und nochmals besten Dank Julia
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!