@Toshy
Das ganze Thema bezieht sich - erkennbar an allen obigen Beispielen - auf 1-Byte-Char, also nicht Unicode.
Und Char-1-Byte ist ein Wert (Wert! - nichts sonst) von 0 bis 255. Der Computer speichert alle Zeichen als Wert. "A" ist der Wert 65, "µ" ist der Wert 181. Und erst unter Verwendung von Pixeltabellen (Fonts) werden diese Werte in die Pixel (z.B. des "A") umgesetzt. Ich vermute, dass auch die Pixeltabellen nummerisch aufgebaut sind.
Wie wir ein Byte im Speicher interpretieren ist Definitionssache, es kann einen Assemblerbefehl darstellen, ein Zeichen, eine Zahl (mit oder ohne Vorzeichen), einen Farbwert etc.
Chars sind (wie alles andere im Computerspeicher auch) nummerische Werte, aber anders codiert als Zahlen. Deshalb kann man Strings nicht mit Longs gleichsetzen.
Aber Chars mit der Einschränkung ein Byte sind exakt so codiert, wie eine 1-Byte-Zahl ohne Vorzeichen, von 0 bis 255, also exakt so codiert wie ein uByte.
Und man kann sehr wohl mit Char rechnen:
Code: Alles auswählen
Define.c zeichen
zeichen=250
zeichen+1
Debug Str(zeichen)
Und ich bin mir sicher, dass die Eins direkt addiert wird und keine Umwandlung in "Bitfolgen" geschieht. Und wenn ich mit Char rechnen kann, erwarte ich auch das korrekte Zählen in einer For-Next-Schleife, oder wie einer oben genannt hat, als RGB-Farbteil, kurz mit den Eigenschaften als uByte.
Übrigens funktioniert Char in anderen Schleifen korrekt:
Code: Alles auswählen
Zeichen.c=0
While Zeichen<255
Debug Str(Zeichen)
Zeichen+1
Wend
und
Code: Alles auswählen
Zeichen.c=0
Repeat
Debug Str(Zeichen)
Zeichen+1
Until Zeichen=255
Es wäre natürlich denkbar, dass Fred, um Operationen an ASCII-Codes zu ermöglichen, das Rechnen und Vergleichen mit Chars gestattet (deshalb würden die Rechnungen und While-Wend und Repeat-Until-Schleifen korrekt ausgeführt), aber ansonsten eine Interpretation als Char will und keine andere Interpretation gestattet (ein Char darf eben kein uByte-Zähler in einer For-Next-Schleife sein).
Diese Sichtweise wäre sehr eng gefasst, nutzerunfreundlich und im Widerspruch zu diesem Code, wo Chars als RGB-Werte korrekt funktionieren (im Unterschied zu Typ Byte .b):
Code: Alles auswählen
Define.c R1,G1,B1
Define.b R2,G2,B2
Debug Str(RGB(180,200,220)) ;Soll
R1=180:G1=200:B1=220
Debug Str(RGB(R1,G1,B1)) ;Ist, korrekte Ausgabe mit Char
R2=180:G2=200:B2=220
Debug Str(RGB(R2,G2,B2)) ;eine korrekte Ausgabe kommt nicht von selbst
Also ist es doch ein For-Next-Bug.
Rainer