[Monkey] Bytes länge richtig auslesen

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

Dottakopf

Betreff: Bytes länge richtig auslesen

BeitragSa, Feb 14, 2015 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Blitzer,

ich habe ein recht elementares Problem:
(Für überflieger siehe letzten Absatz )

in Blitz wird geschrieben:
Code: [AUSKLAPPEN]
...
Writebyte(file,90)
Writebyte(file,196)
...
Writeint(file,xy)
Writeint(file,xy)


nun lese ich das mit Monkey aus, und springe immer eine gewisse Byte zahl weiter für den nächsten Wert.
das Funktioniert auch ganz toll solange der Byte nur aus 2 ziffern besteht, sobald er größer wird passt das "offset" wie weit ich für das nächte auslesen "springen" muss nicht mehr..

ähm ja.. nun was muss ich tun damit ich das verhindern kann ? ich müsste wissen wie viele Bytes der letzte eingelesene wert hatte.. ach ich bin so mies drin wenn es um die thematik geht Embarassed


mal ein paar code zeilen damit ihr das Problem leichter versteht:


so wird es in BB korrekt ausgelesen.. irgendwas macht bb automatisch richtig..
Code: [AUSKLAPPEN]

file = ReadFile("test.txt")
   height = ReadByte(file)
   a = ReadByte(file)                        ; Hintergrundfarbe (Rot-Wert)
   b = ReadByte(file)                        ; Hintergrundfarbe (Gruen-Wert)
   c = ReadByte(file)                        ; Hintergrundfarbe (Blau-Wert)

   While Eof(file) = 0
      asci = ReadByte(file)   ; Ascii-Code der Zeichen
      posx = ReadInt(file)   ; X-Position des Zeichens auf der Grafik
      posy = ReadInt(file)   ; Y-Position des Zeichens auf der Grafik
      width = ReadInt(file)   ; Breite des Zeichens
      
      DebugLog "height" + height
      DebugLog "acsi" +asci
      DebugLog "posx" +posx
      DebugLog "posY" +posy
      DebugLog "widht" + width
      DebugLog "--"
      
      
   Wend





in Monkey wird hier gelesen.. eine mischung aus ints und bytes.. ich springe jeweils um das Offset..
Code: [AUSKLAPPEN]

   'Font config auslesen
      fFontConf = DataBuffer.Load(pFontConf)
      If fFontConf = Null Then Print "FontConfig Not Found !!" + pFontConf
         
      'Font Config
         Local charHeight = fFontConf.PeekByte(0)
         Local charMaskR = fFontConf.PeekByte(1)
         Local charMaskG = fFontConf.PeekByte(2)
         Local charMaskB = fFontConf.PeekByte(3)
         
         'Font chars
         For Local i:Int = 4 Until fFontConf.Length() Step 13
            Local CharAsci = fFontConf.PeekByte(i) 'Wie viele Bytes war das nun wirklich groß??
            Local CharPosX = fFontConf.PeekInt(i + 1)
            Local CharPosY = fFontConf.PeekInt(i + 5)
            Local CharWidth = fFontConf.PeekInt(i + 9)
            Print "asci" + CharAsci
            'Char erstellen
            AddChar(CharAsci, CharPosX, CharPosY, CharWidth, charHeight)
            
      
      Next




Genau genommen liegt der fehler dann hier:
Code: [AUSKLAPPEN]

Local CharAsci = fFontConf.PeekByte(i) 'Wie viele Bytes war das nun wirklich groß??


sobald dieser wert aus einer 3 stelligen Ziffer besteht geht alles in die Hose.
Anstatt den wert 196 erhalte ich -90 da falsch gelesen wird. in BB wird es aber als Byte geschrieben.
Kann ich diesen wert 196 überhaupt als Byte auslesen Confused

Wie löse ich das am besten?


Vielen Dank !

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

DAK

BeitragSo, Feb 15, 2015 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier mal aus, was der Wert ist, wenn du 127 bzw. 128 ausliest. Ich nehme an, dass da die Grenze sein wird. In dem Fall liest Monkey das Byte scheinbar statt als unsigned Byte als signed Byte aus. Nur sollt dann bei 196 eher -60 kommen, nicht -90.

Ist dem so, dann kannst du es fixen, indem du bei einem negativen Ergebnis folgendes tust:

Code: [AUSKLAPPEN]

read = -60
read = 256+read
Gewinner der 6. und der 68. BlitzCodeCompo

Dottakopf

BeitragSo, Feb 15, 2015 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Woa ! vielen Dank !
da wäre ich nie drauf gekommen .
Ja hatte mich vertippt, natürlich - 60

Funtzt Very Happy
Rechtschreibfehler gelten der allgemeinen Belustigung!

DAK

BeitragMo, Feb 16, 2015 10:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Sache!
Sowas von wegen signed/unsigned kommt recht häufig vor. Wenn du Daten übers Netzwerk überträgst, dann kann noch Byte Order dazu kommen, wo die Bits entweder mit dem höchstwertigsten oder niedrigstwertigsten Bit zuerst übertragen werden können.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group