AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String in einem Stream schreiben

Ein Thema von reef · begonnen am 8. Mär 2013 · letzter Beitrag vom 8. Mär 2013
Antwort Antwort
CCRDude

Registriert seit: 9. Jun 2011
677 Beiträge
 
FreePascal / Lazarus
 
#1

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 11:44
Soweit ich verstanden habe, verwendet RawByteString keinerlei codeseitenspezifische Konvertierung bei Zuweisungen, AnsiString schon.

Gerade bei einer seriellen Schnittstelle würde ich nicht zwingend reine Textdaten erwarten, sondern auch Steuerzeichen.

Ich hatb neulich mal länger an einem Problem gesessen, wo eine teure Fremdkomponente Binärdaten in einen AnsiString gelesen und mit einer AnsiString-Konstante verglichen hat. Lief super - nur nicht auf z.B russischen oder japanischen Systemen, da ist der String-Vergleich bei gleichen Bytes (in Roh-Ansicht zeigte der Debugger das) in die Hose gegangen, weil sie im AnsiString als andere Zeichen interpretiert wurden als in der Konstante.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 11:56
Soweit ich verstanden habe, verwendet RawByteString keinerlei codeseitenspezifische Konvertierung bei Zuweisungen, AnsiString schon.
RawByteString oder TBytes bevorzuge ich bei Binärdaten und strings, deren Encoding noch nicht bekannt ist, auch. Über RawByteString schrieb Allen Bauer, es sei ursprünglich nur als Codepageloser Datentyp für Prozedur- und Funktionsparameter gedacht gewesen ("RawByteString was intended to be used only as a function parameter"). - http://stackoverflow.com/questions/6...-vs-ansistring
Was zu der Frage führt ob die Verwendung von RawByteString für anderes als "bad practice" angesehen wird.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 11:58
@CCRDude Du hast Recht, sorry ich war falsch abgebogen ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:02
Solange da nichts interpretiert (angezeigt) wird ist das doch Pott wie Deckel oder nicht?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mjustin

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

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:08
Solange da nichts interpretiert (angezeigt) wird ist das doch Pott wie Deckel oder nicht?
Interpretiert wird nicht nur bei der Anzeige, sondern schon bei der Zuweisung z.B. an string / AnsiString Variablen. Dann erscheinen "Fragezeichen" für nicht interpretierbare Zeichen/Zeichenfolgen.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:12
Der Grund dürfte sein das du nicht den Inhalt des Strings schreibst sondern den String selbst:
Fstream.WriteBuffer(Str, Count); Wenn du ein SizeOf(Str) aufrufst wirst du sehen das der String immer 4 Bytes groß ist. Wenn du den Inhalt des Strings schreiben willst musst du Str[1] übergeben (die Referenz auf das erste Zeichen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:27
Dann erscheinen "Fragezeichen" für nicht interpretierbare Zeichen/Zeichenfolgen.
W0?

Wichtig ist der korrekte Aufruf von ReadBuffer und WriteBuffer
Delphi-Quellcode:
Fstream.WriteBuffer(Str[1], Count);
                    // ^^^
Die Parameterübergabe sieht zunächst etwas seltam aus, aber da "str" ein Zeiger auf ein dynamisches Array ist, muss das so sein.
Strings sind in Delphi eine Sonderform eines dynamisches Arrays.
Auch bei shortstrings solltest Du so vorgehen, es sei denn Du willst unbedingt das Längenbyte mit wegschreiben.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:13
Wichtig ist der korrekte Aufruf von ReadBuffer und WriteBuffer
Delphi-Quellcode:
Fstream.WriteBuffer(Str[1], Count);
                    // ^^^
Die Parameterübergabe sieht zunächst etwas seltam aus, aber da "str" ein Zeiger auf ein dynamisches Array ist, muss das so sein.
Strings sind in Delphi eine Sonderform eines dynamisches Arrays.
  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 11:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz