German 127 +1 = 63 ????

hogiebaer

Active Member
Licensed User
Longtime User
!! Nachträgliche Änderung des Themas : 127+1 = -128
!! Die 63 kommen dann durch eine Konvertierung zustande.


Hallo ihr lieben,

bin eben fast aus allen Wolken gefallen.
Habe in der Global Area Eine Variabel als BYTE deklariert, die als Laufvariable benutzt wird und immer
um eins (1) erhöht wird.

Nun konnte ich feststellen, dass nach 127 nicht 128 kommt, sondern -128 !!!!!!!!!!!!!!!!!!!!!!!

Jetzt habe ich herausgefunden, dass es wohl Javatypisch ist, dass Bytes STANDARDMÄSSIG als SIGNED deklariert werden. Gibt es da im B4A einen Switch zum umlegen, dass der Variablentyp BYTE als UNSIGNED deklariert wird ?

Könnte natürlich auch sämtliche Bytes als Integer deklarieren, aber wenn das nicht unbedingt nötig ist, würd ich gerne drauf verzichten. Viel schlimmer ist die Tatsache, dass ich die Grösse des "Schades" noch gar nicht abschätzen kann, da in diesem grossen Projekt viele Variablen als Byte deklariert sind, die zwar nicht alle den vollen Werteumfang benutzen, aber es könnten.

Also, auf den Punkt gebracht:
Ist es von Erel so vorgesehen, dass ein BYTE SIGNED ist oder ist es ein Compilerfehler?
Ich vermute einfach mal , dass es so ist ;)

Aber ich verstehe dann folgendes nicht, bzw. warum es funktioniert

Dim buffer() As Byte
buffer = send.GetBytes("ISO-8859-1")
astreams.send.........

Hier koennen ja AUCH Wertigkeiteb ÜBER 127 genutzt werden, obwohl der Buffer als Byte
deklariert ist. Gibts da Unterschiede ??

Gruss aus Kassel
Holger
 
Last edited:

stevel05

Expert
Licensed User
Longtime User
Leider nicht, ist das ein signiertes Byte Variable. Sie können den richtigen Wert zu bekommen, wie in int mit:

Übersetzung mit freundlicher Genehmigung von Google Translate


Unfortunately not, the byte is a signed variable. You can get the correct value as to int using:

B4X:
Dim IntVal As int = Bit.And(ByteVal,0xFF)
 

MaFu

Well-Known Member
Licensed User
Longtime User
Aber ich verstehe dann folgendes nicht, bzw. warum es funktioniert

Dim buffer() As Byte
buffer = send.GetBytes("ISO-8859-1")
astreams.send.........

Hier koennen ja AUCH Wertigkeiteb ÜBER 127 genutzt werden, obwohl der Buffer als Byte
deklariert ist. Gibts da Unterschiede ??

Warum sollte das nicht funktionieren? Das Byte-Array dient hier als Datencontainer, da gibt es keinen besseren Datentyp als Byte. Du darfst in diesem Fall die einzelnen Bytes nicht als Zahlen sehen.
Es gibt eigentlich nur Probleme wenn man Byte zum Rechnen verwendet. Für Schleifenvariablen und Ähnliches sollte man bei INT bleiben.
 
Top