German Byte Verständnis Problem

rage2001

New Member
Licensed User
Longtime User
Hallo

Da ich mein Problem nicht ins englische übertragen kann (ich bin halt dieser Sprache nur in Leseform mächtig) versuche ich das mal im German-Forum.
Ich bin hier und in B4A neu. Das es beim benutzen einer neuen Programmierumgebung Probleme gibt, das ist ja eher logisch. Nun ist B4A eigentlich leicht zu erlernen und alles was ich irgendwie damit tun wollte, habe ich soweit hinbekommen. Wie es dann aber so ist, wartet der Ungemach an einer Stelle wo man ihn nicht erwartet.
Ich lese von einem anderen Gerät, im Testfalle ist es ein PC per AsyncStream eine Bytefolge
$C0,$FF,$10, $00, $00, $00, $00, $00, $00, $00,$C0 (sorry ich bin eigentlich Delphianer
0xC0,0xFF,0x10, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,0xC0
das ist im Grunde ein Slip-Protokoll, Anfang und Endekennzeichen (0xC0) und ein wenig Drumrum um ein 0xC0 übertragen zu können. Das verwende ich seit einigen Jahren um Sensoren per RS485 zu vernetzen und habe das Protokoll unter Delphi und VB (in WinMobile-Geräten) in Verwendung.
In B4A habe ich jetzt eigentlich nur das Problem das ein

Sub AStreams_NewData (Buffer() As Byte)
Slip.DataReceived(Buffer)
End Sub

ebend halt nich das obige Ergebnis bringt, sondern ein
B4A_Pic01.jpg

Damit schlagen dann natürlich Vergleiche wie Buffer(0)=0xC0 logischerweise fehl.
Ich hab hier eine Menge rumgelesen und probiert, aber ich komme einfach zu keine guten Ergebniss.

Sub ToUnsigned(b As Byte) As Int
Return Bit.And(0xFF, b)
End Sub

public Sub GetByte(Index As Int) As Byte
Dim b As Byte
Dim Test As Byte
Dim i As Int
i=ByteListe.Get(Index)
'b=Bit.And(0xFF,i)
Dim bc As ByteConverter
Dim g() As Byte = bc.IntsToBytes(Array As Int(i))
'Dim bc As ByteConverter
'b=bc.IntsToBytes(Array As Int(i))
'Test=b(0)
b=ToUnsigned(g(3))
Return b
End Sub

Sicherlich ist das kein Programmfehler, sonder das typische Das-Problem-Sitzt-Vor-Dem-Monitor-Problem, aber vieleich kann mir ja jemand auf die Sprünge helfen. Für mein Verständnis ist ein Byte ein Byte also von 0 bis 255. Man sieht ja auch in dem Datenfeld das die Daten richtig ankommen, nur ist meine Interpretationsweise halt falsch, muß ich meine erwarteten Bytes in signierte Ints umwandeln oder begehe ich einen falschen Weg.

Nachtrag:OK, das ein Byte ein Byte ist ist so nicht richtig wie ich gerade gelesen habe. Ein Java-Byte ist also von -127..127. Dann wäre mein Problem jetzt halt nur noch wie schreibt man dann ein Test if Byte(0)=0xC0 then?
 
Last edited:

MaFu

Well-Known Member
Licensed User
Longtime User
Java kennt halt keine "unsigned" Datentypen. Alle Variablen sind vorzeichenbehaftet.
Dein Problem ist dass Du mit "Byte(0)=0xC0" ein Char mit einem Int vergleichst.
Speicher Dir beim Programmstart den Wert 0xC0 in einer globalen Bytevariable ab (sozusagen als Konstante) und vergleiche dann mit dieser Variable. Dann sollte es funktionieren da beide Vergleichswerte den gleichen Datentyp haben.
 
Last edited:
Top