AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi <Stream>.Read(<Word>, 2) überspringt ein Byte
Thema durchsuchen
Ansicht
Themen-Optionen

<Stream>.Read(<Word>, 2) überspringt ein Byte

Ein Thema von xZise · begonnen am 4. Sep 2008 · letzter Beitrag vom 6. Sep 2008
 
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

<Stream>.Read(<Word>, 2) überspringt ein Byte

  Alt 4. Sep 2008, 20:51
Hallo DP,
kann natürlich sein, das ich falsch liege, aber kann es sei das <Stream>.Read(<Word>, 2) (nicht immer ...) ein Byte überspringt.
Wenn ich folgende Bytereihenfolge habe:
Code:
[color=#0000ff]Offset 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F[/color]
[color=#0000ff]000000[/color] 73 66 6C 13 06 0C 00 00 00 00 04 4E 61 6D 65 05
[color=#0000ff]000010[/color] 41 75 74 6F 72 [i]0A 0A 00 03 [u]00 04[/u][/i] 00 00 01 00 02
[color=#0000ff]000020[/color] 00 03 00 00 00 00 00 00 00 00 00 00 00 01 01 01
[color=#0000ff]000030[/color] 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
[color=#0000ff]000040[/color] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[color=#0000ff]000050[/color] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[color=#0000ff]000060[/color] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[color=#0000ff]000070[/color] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[color=#0000ff]000080[/color] 00 00 00 00 00 00 00
Wird damit zum einen eine Vollständige Snakey Fusion Karte dargestellt (btw) und zum anderen habe ich folgendes Problem, dass ich die Länge der Schlange in den Bytes 19 - 0A auslese. Also möchte ich da eine vorzeichenlose ganzzahlige 16 Bit Zahl, wofür sich ja Word anbietet.

Also flucks dahin gedackelt und nun die Bytes ausgelesen mit oben genannten Befehl. Allerdings bekomme ich nun 1024d raus, was verwundert, weil eigentlich sollte da weder bei Little noch bei Big Endian 1024 raus kommen. Erst wenn er ein Byte weiterrutscht sollte das passieren.

So sieht der Code dazu aus:
Delphi-Quellcode:
[...]
// Read width
AStream.Read(byteBuffer, 1);
FWidth := byteBuffer;
// Read height
AStream.Read(byteBuffer, 1);
FHeight := byteBuffer;
// Read difficulty
AStream.Read(byteBuffer, 1);
FDifficulty := byteBuffer;
// Read direction
AStream.Read(byteBuffer, 1);
dirBuffer := TDirection(byteBuffer);

// Read snake
// ... first the length ...
AStream.Read(wordBuffer, 2);
[...]
Nun in Zeile zwei liest er "10d" aus und auch in Zeile 5 was die Vermutung stärkt das er völlig korrekt die Bytes 15 und 16 ausgelesen hat. Auch die Schwierigkeit wird auf "0d" gesetzt und in Zeile 11 liest er auch korrekterweise "3d" aus. Aber dann gerät es aus den Fugen, als er in "wordBuffer" "1024d" einließt.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
 


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 01:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz