Autor Beitrag
Burgunder
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 07.01.09 12:14 
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.
ausblenden 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))); // Casting in unsigned 

  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 user profile iconNarses: Delphi-Tags hinzugefügt
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 07.01.09 12:20 
Ich denke mal, dass der Fehler durch das
ausblenden 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.

_________________
PROGRAMMER: A device for converting coffee into software.
Burgunder Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 07.01.09 12:36 
Ich zitier mich mal selbst ;)

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden Delphi-Quelltext
1:
XI:= longword(htonl(YI));					

_________________
PROGRAMMER: A device for converting coffee into software.
Burgunder Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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