Seite 1 von 1

Character-Variablen

Verfasst: 01.01.2007 18:58
von PureBasic4.0
Hi, Leute

Ich möchte Character Zahlen in eine Datei reinschreiben. Funktioniert auch soweit. Wenn ich jetzt aber große Zahlen größer 200 (aber kleiner als 255) in die Datei reinschreibe und die Datei hinterher mit PB wieder öffne und die Zahlen auslese, bekomme ich oft negative Zahlen heraus. Weiß jemand, wo das Problem liegt?

Danke,
PureBasic4.0

Verfasst: 01.01.2007 19:42
von Kaeru Gaman
byte ist vorzeichenbehaftet.
ist aber kein problem, benutze "Zahl & 255", dann eliminierst du das vorzeichen.

Code: Alles auswählen

a.b = -93
Debug a
Debug a & 255
Debug Chr(a & 255)

Verfasst: 02.01.2007 02:54
von edel
Als Alternative gleich .c nehmen.

Verfasst: 02.01.2007 08:58
von Kaeru Gaman
vor allem ReadCharacter / WriteCharacter...

Verfasst: 03.01.2007 20:42
von PureBasic4.0
das ist ja mein Problem. ich schreibe per writecharacter eine Zahl in ne Datei rein und bekomme (readcharacter) manchmal eine negative Zahl heraus (besonders bei >200)

Verfasst: 03.01.2007 20:57
von remi_meier
lol tatsächlich :lol:

Code: Alles auswählen

CreateFile(0, "test.txt")

WriteCharacter(0, 255)
CloseFile(0)

ReadFile(0, "test.txt")
Debug ReadCharacter(0)
so gehts

Code: Alles auswählen

CreateFile(0, "test.txt")

WriteCharacter(0, 255)
CloseFile(0)

ReadFile(0, "test.txt")
c.c = ReadCharacter(0)
Debug c

Verfasst: 04.01.2007 02:27
von Kaeru Gaman
yo, wenn ich das zweite beispiel verwende, klappt alles, auch mit ner schleife für die werte...

@4.0
ich kann mir nicht vorstellen, dass du irgendwo debug verwendest.

also ist das wohl ein type-problem beim direkten verwenden des rückgabewertes.
mich würde jetzt wirklich mal interessieren, wie dein code an der stelle aussieht, wo der fehler auftritt.

Verfasst: 05.01.2007 17:05
von remi_meier
Es hat nichts mit dem direkten verwenden des Rückgabewertes zu tun,
das mach ich bei c.c = ReadCharacter(0) ja auch. Nur wird hier halt die
-1 als 255 dargestellt, da Character-Variablen in ASCII-Mode zwar auch
nur 1 Byte haben, aber bei der Ausgabe als unsigned interpretiert werden.

Das Problem liegt darin, dass entweder ReadCharacter() falsch deklariert
wurde (nicht Character als Rückgabetyp, sondern Byte), oder Debug nicht
mit zurückgegebenen Character-Werten von Funktionen klar kommt.

Verfasst: 05.01.2007 17:45
von PureBasic4.0
Der Code, der die Datei schreibt:

Code: Alles auswählen

Red = Red(Farbe)
Green = Green(Farbe)
Blue = Blue(Farbe)
WriteCharacter(1,Red)
WriteCharacter(1,Green)
WriteCharacter(1,Blue)
Der Code, der aus der Datei liest:

Code: Alles auswählen

Red = ReadCharacter(1)
Green = ReadCharacter(1)
Blue = ReadCharacter(1)
Debug "Rot:"+Str(Red) ;Negative Zahl (bei hohen Zahlen)
Debug "Grün:"+Str(Green)  ;Negative Zahl (bei hohen Zahlen)
Debug "Blau:"+Str(Blue)  ;Negative Zahl (bei hohen Zahlen)
Farbe = RGB(Red,Green,Blue)

Verfasst: 05.01.2007 18:40
von ts-soft
Solange Du Deine Variablen richtig deklarierst, gibt doch keine Problem
Es sollte zwar auch anders gehen :freak: , aber richtig deklarieren sollte man sowieso

Code: Alles auswählen

Red.b = Red($DD69EA)
Debug Red
File.l = CreateFile(#PB_Any, "c:\test.bin")
If File
  WriteCharacter(File, Red)
  CloseFile(File)
EndIf

File.l = ReadFile(#PB_Any, "c:\test.bin")
If File
  readRed.c = ReadCharacter(File)
  Debug readRed
  CloseFile(File)
EndIf