AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung FreePascal [FPC 2.6.2] AnsiString für binäre Daten verwendbar?
Thema durchsuchen
Ansicht
Themen-Optionen

[FPC 2.6.2] AnsiString für binäre Daten verwendbar?

Ein Thema von mjustin · begonnen am 9. Nov 2013 · letzter Beitrag vom 9. Nov 2013
Antwort Antwort
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#1

[FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 08:13
Ist in Free Pascal 2.6 der Type AnsiString zum Speichern von Binärdaten verwendbar?
In Delphi habe ich RawByteString verwendet, das aber erst in FPC 2.7.1 enthalten ist.


Ich verwende RecvBufferStr aus Synapse zum Empfangen von Binärdaten, und habe aufgrund der Dokumentation angenommen, es sei möglich binäre Daten in einen AnsiString zu speichern:

Delphi-Quellcode:
    {Similar to RecvBufferEx, but readed data is stored in binary
     string, not in memory buffer.}

    function RecvBufferStr(Len: Integer; Timeout: Integer): AnsiString; virtual;
Falls AnsiString jedoch von der (Default) Codepage abhängig ist, wird es beim Empfangen von Daten via Synapse in FPC Anwendungen zu korrupten Daten kommen. (Oder habe ich etwas übersehen?)
Michael Justin

Geändert von mjustin ( 9. Nov 2013 um 14:37 Uhr) Grund: statt lokale: (Default) Codepage
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#2

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 08:34
Ja, kannst du machen. Ansi ist Ansi, was soll da lokaleabhängig sein?
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 08:49
Eigentlich ist AnsiString für Binärdaten vollkommen ungeeignet. Binärdaten können einen Nullwert ($00) enthalten. Bei vielen Funktionen welche man mit AnsiStrings verwenden kann die ein Betriebssystem-API aufrufen werden die Binärdaten dann am $00 abgeschnitten da dies für C-Funktioen das String-Ende ist.

Das dies im Bereich Netzwerkverkehr oft verwendet werden kann liegt daran das hier (orginale) Binärdaten oft Codiert (Base64 und Co.) werden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#4

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 08:51
Ja, kannst du machen. Ansi ist Ansi, was soll da lokaleabhängig sein?
Ich nehme an, dass es Probleme gibt wenn die aktuelle Codepage manche Zeichen nicht enthält. Für Delphi 2009 und höher habe ich gerade dieses Beispiel gefunden:

https://forums.embarcadero.com/threa...threadID=70842

Um es unter Free Pascal 2.6 zu testen, könnte ich einem AnsiString einfach der Reihe nach alle Zeichen von $0 bis $ff hinzufügen und dann kontrollieren ob es angekommen ist. Ich teste das mal.
Michael Justin
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#5

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 09:00
Nachtrag:

http://synapse.ararat.cz/doku.php/public:howto:d2009

Zitat:
Binary communication buffers are implemented as ansistrings. Data from socket goes to memory what is managed by ansistring and all next processing goes through ansistrings.
Wenn Free Pascal AnsiString wie in non-Unicode Delphi arbeiten, wäre es also nach diesen Angaben technisch kein Problem, Binärdaten in AnsiString zu speichern.

Ich habe eine Fehlermeldung eines Benutzers erhalten, aber noch keinen reproduzierbaren Testfall. Ich melde mich dann hier wieder, sobald es sich aufgeklärt hat.
Michael Justin

Geändert von mjustin ( 9. Nov 2013 um 09:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#6

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 11:19
In Delphi habe ich RawByteString verwendet, das aber erst in FPC 2.7.1 enthalten ist.
Der RawByteSting in den neueren Delphi Versionen, ist auch nur ein AnsiString.

Wenn Free Pascal AnsiString wie in non-Unicode Delphi arbeiten...
Wieso sollte in non-Unicode Versionen AnsiString anders arbeiten? Wie schon gesagt, ein AnsiString ist ein AnsiString. Da ändert sich gar nichts.
Gruß
Cookie

Geändert von cookie22 ( 9. Nov 2013 um 11:27 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#7

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 14:54
In Delphi habe ich RawByteString verwendet, das aber erst in FPC 2.7.1 enthalten ist.
Der RawByteSting in den neueren Delphi Versionen, ist auch nur ein AnsiString.
In Delphi 2009 ist

type RawByteString = type AnsiString(65535); In Free Pascal 2.7.1 ist

type RawByteString = type AnsiString($FFFF); Vgl. z.B. Wie funktioniert RawByteString? (ab FPC 3.x)

Der AnsiString in Delphi 2009 und neuer verwendet defaultmäßig die aktive Codepage des Rechners auf dem das Programm ausgeführt wird.

Ab Delphi 2010:

RawByteString:      AnsiString; bzw. in C++

typedef AnsiStringT<65535> RawByteString;
Michael Justin
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#8

AW: [FPC 2.6.2] AnsiString für binäre Daten verwendbar?

  Alt 9. Nov 2013, 14:39
Ja, kannst du machen. Ansi ist Ansi, was soll da lokaleabhängig sein?
Stimmt. Meinte auch die lokalen (Default) Codepage der Sender / Empfänger Systeme. (Die auch Linux als OS einsetzen könnten.)
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz