German AStreams... mit Bytes >127

DonManfred

Expert
Licensed User
Longtime User

Diese sub ist die fehlende in meinem Beispiel. Verwendet hatte ich sie natürlich.

B4X:
'https://www.b4x.com/android/forum/threads/signed-unsigned-bytes-confusion.61290/post-386721
Sub ToUnsigned(b As Byte) As Int
    Return Bit.And(0xFF, b)
End Sub
 

ewatv

Member
Licensed User
Hallo OliverA, danke für die aufgezeigte Alternative , werde sie mir heute noch vornehmen.
Hallo Manfred, beim compilieren (natürlich mit der ToUnsigned Sub) bleibt gleich alles stecken. Welche Libs werden denn erwartet?
Ich habe jetzt: B4XCollection(1.05) / B4XTable(1.16)/ ByteConverter(1.10)/ Core(9.5)/Network(1.15) und RandomAccessFile(2.32)
 

ewatv

Member
Licensed User
Da scheint wohl ein Post von mir heute Vormittag verloren gegangen zu sein:
Hallo OliverA, vielen Dank für die aufgezeigte Alternative, werde ich heute noch angehen.
Für DonManfred: Mit Deinen Subs "AStreams_NewData" und "ToUnsigned" geht bei mir garnix mehr.
Vielleicht liegt's an einer fehlenden Lib. Habe jetzt aktiviert: B4XTable / ByteConverter / Core / Network / RandomAccessFile .
Ich werde aber alles nochmal kritisch durchgehen und mich dann nochmal melden.
Besten Dank
ewatv
 

DonManfred

Expert
Licensed User
Longtime User

Attachments

  • QIyneu.zip
    7.3 KB · Views: 306

OliverA

Expert
Licensed User
Longtime User
Von was Ich verstehe, die Daten die ankommen via AStreams_NewData sind Byte Daten. Byte Daten können nicht einfach in einen String verwandelt werden via BytesToString. Die Daten für BytesToString muss Daten von einem String sein, nicht einfach Byte Daten.
 

OliverA

Expert
Licensed User
Longtime User
Das zweite Problem ist, dass in B4A Byte, Short, Int, Long als Signed Byte, Signed Short, ... etc. behandelt. So ein Byte mit dem Bits 11111111 wird als -1 ausgedruckt. Aber das ist (in diesem fall) nur ein optisches Problem. Hat nichts zu tun mit dem Bits in dem Byte! Um 255 auszudrucken anstatt -1, wandeln wir mit ToUnsigned das Byte zu einem (Signed) Int mit der Bit Verfassung von 00000000 00000000 00000000 11111111 und dann wird dieser Int als 255 ausgedruckt.
 

ewatv

Member
Licensed User
B4X:
Sub AStreams_NewData(Buffer() As Byte) As String
    Dim newBuffer(Buffer.Length) As Byte
    
    For i = 0 To Buffer.Length -1
        newBuffer(i) = ToUnsigned(Buffer(i))
    Next

    Dim bString As String
    Dim bc As ByteConverter
    bString = (bc.HexFromBytes(newBuffer))
    Log("bString: " & bString)

    Dim sData As String
    sData = bString.SubString2(0,2)
    Log("sData: " & sData)
End Sub
Damit kann ich mir einen hex-Wert (als Teilstring) herauspicken und wenigstens eine Teilauswertung machen - immerhin ein Fortschritt.
Wieso man aber aus einem String "CE" nicht das Byte (oder Short oder Integer) 206 "machen" kann ist mir ein Rätsel -aber das liegt sicher an mir.
Einen guten Abend allen Lesern
ewatv
 

DonManfred

Expert
Licensed User
Longtime User
Wieso man aber aus einem String "CE" nicht das Byte (oder Short oder Integer) 206 "machen" kann ist mir ein Rätsel
wieso nicht? Wenn Du den int wert haben willst vom AStreamBuffer

B4X:
    Dim intBuffer(Buffer.Length) As Int
    For i= 0 To Buffer.Length-1
        intBuffer(i) = ToUnsigned(Buffer(i))
    Next
Wenn Du nun den intBuffer Array durchläufst dann wirst Du feststellen, dass hier die richtigen Int Werte stehen
 

OliverA

Expert
Licensed User
Longtime User
richtigen Int Werte stehen
Selbst im Byte Array stehen die „richtigen″ Werten. Nur beim ausdrucken der Werte muss man halt ein bisschen arbeiten um den gewünschten auskommen zu erhalten. ?
 

ewatv

Member
Licensed User
... durch Nacht zum Licht!
Was zunächst wie ein Albtraum für mich aussah, hat sich in Wohlgefallen aufgelöst.
Von ursprünglich > 20 Zeilen Code bleiben einige wenige und das Ergebnis ist exakt das was ich wollte.
Die Unterstützung im Forum ist wirklich hervorragend - und hat mich in meiner Lernphase ein großes Stück weitergebracht.
Vielen Dank an alle, speziell an DonManfred der sich richtig reingekniet hat.
ewatv
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…