Base64 Bausteine ...

Begonnen von mactoolz, 12. Dezember 2014, 20:03:27

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

mactoolz

Hi,

also nachdem ich das eine Thema abgeschlossen habe, mache ich gerne ein neues Fass auf.
Also, in der Oscat Lib gibt es Bausteine die sich mit Base64 Zeichensatz auseinander setzen.

Ich bin gerade der Meinung das die irgendwie nicht funktionieren.

Und zwar, die Daten die ich Empfange habe ich im Internet bei anderen Base64 Decoder mal gegen getestet.
Dort werden alle Daten mir richtig angezeigt. Leider in der Oscat Lib nicht.

Oder gibt es da was was ich nicht weiß ... ???

Danke


MacToolz

peewit

mach doch ein beispiel

welche daten werden wie kodiert, dann kann man in 10 sekunden prüfen ob es stimmt


ich glaube das du etwas falsch machst, denn den base64 nutzen ich schon ewigkeiten im email-client
und wenn hier etwas falsch sein würde dann würde hier keine übertragung fehlerfrei funktionieren.


mactoolz

#2
Hi,

meine Daten habe ich im Netz gegen geprüft. Das Ergebnis was ich als Base64 habe und erwarte ist richtig.

Das ist der String den ich dekodieren möchte. : EQUZ4wUAEg9KRVEwNDcwNjQ2
Das Ergebnis ist : ãJEQ0470646

Ich habe den Baustein "BASE64_DECODE_STREAM" verwendet.

Mactoolz

peewit

man muss auch aufpassen auf die sichtweise

es werden beliebige bytes in einen base64 text konvertiert bzw.
ein base64 text in eine bytefolge

eine bytefolge lässt sich nicht so einfach und fehlerfrei als text darstellen !

es gibt hier nicht darstellbare bytes
nicht jedes byte kann als zeichen dargestellt werden

du musst schon die bytefolge ansehen und nicht einen text

dein beispiel ist aber ein korrektes oder ?
wo ist den der fehler, ausser die nicht darstellbaren zeichen !

sieh dir das bild an, es ist alles korrekt


[gelöscht durch Administrator]

mactoolz

Hi,

die Sichtweise ist mir bekannt. Nicht jedes Base Zeichen ergibt ein sinnvolles Ascii Zeichen. So ein Base64 Zeichen kann auch nur als Wert gesehen werden.
Genau so soll der gewandelte Text aussehen, und das zu erwartende Zeichen ist auch richtig.

Das heißt, du hast deinen Base Baustein verwendet?

Wenn ja, dann frage ich mich was falsch sein sollte?

Kannst du dein Beispiel mal posten bitte.

Danke


MacToolz

peewit

wir drehen uns im kreis  (kommt mir bekannt vor)

du behauptest das der baustein nicht richtig funktioniert

dann musst du auch ein nachvollziehbares beispiel bringen das zeigt das etwas nicht korret ist


also einen base 64 string und den daraus resultierenden byte buffer inhalt.

Das ist der String den ich dekodieren möchte. : EQUZ4wUAEg9KRVEwNDcwNjQ2
Das Ergebnis ist : ãJEQ0470646


dieses beispiel als reinen text zu bringen ist sehr schlecht und ist auf der basis ja auch völlig korrekt.


mactoolz

Hi,

dann schau dir mal bitte den Anhang an ...



[gelöscht durch Administrator]

peewit

#7
nach dem du nicht lesen willst was ich immer wieder schreibe, nehme ich mir nochmals zeit


ich hatte dir doch schon mitgeteilt das du das ergebnis nicht als text sondern als byte-stream sehen musst
da nicht alle byte als darstellbare zeichen angezeigt werden können.

der richtiger bytestream ist   
$11,$05,$19,$E3,$05,$00,$12,$0F,$4A,$45,$51,$30,$34,$37,$30,$36,$34,$36

jetzt zeigt dir zwar codesys alle nicht darstellbaren zeichen mit $xx an, jedoch hat das einen kleinen haken !

codesys kümmert sich nicht darum wie lange dein string wirklich ist, sondern definiert das ende eines string ganz primitiv mittels $00,  somit wird dein string ab den 5. byte (zeichen) abgeschnitten, da hier erstmals ein byte $00 folgt.

baustein arbeitet völlig korrekt

darum nochmals und zum letztenmal:
du darfst bei einen echten bytestream der mittels base64 kodiert wurde und du dekodieren möchtest das ergebnis in keinen string ablegen, sondern in einen bytearray, da ein byte 00 deinen string abschneidet.

aber das ist kein problem sondern ein handhabungsfehler -> also deiner !


mactoolz

Hi,

jetzt reg dich mal nicht so auf ... ist doch halb so wild was da passiert.
Du liest auch nicht alles ...

Ich habe geschrieben das ich weis das nicht jedes Byte ein Sinnvolles Zeichen ergibt.

Eins habe ich nicht bedacht ein Byte mit Inhalt von 16#00 bei der Konvertierung in String die Terminierung ergibt.

Danke