Konwersja stringa na TMemoryStream

Konwersja stringa na TMemoryStream
Paweł Górski
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:16
0

Witam,

mam funkcję, która pobiera z bazy postgres dane graficzne w formacie WKB.
Używam Borlanda C++, wszystkie dane z bazy zapisywane są do:

Kopiuj
TMemoryStream* mStr = new TMemoryStream();

Z innego źródła dostaję strumień WKB w postaci stringa.
W jaki sposób zapisać tego stringa do TMemoryStream?
Potrzebna jest chyba jakaś konwersja,
proszę o jakieś sugestie.

Pozdrawiam.

edytowany 2x, ostatnio: cerrato
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99959004)
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

Użyj: TStringStream


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Paweł Górski
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:16
0

Kiedy robie tak:

Kopiuj
AnsiString res("010300002084080000010000000E0000007B14AEC74699244152B");
TStringStream* pss = new TStringStream(res);

mam:

Kopiuj
[bcc32 Error] Unit1.cpp(142): E2015 Ambiguity between '_fastcall System::Classes::TStringStream::TStringStream(const System::UnicodeString) at c:\program files (x86)\embarcadero\studio\19.0\include\windows\rtl\System.Classes.hpp:1957' and '_fastcall System::Classes::TStringStream::TStringStream(const System::AnsiStringT<65535>) at c:\program files (x86)\embarcadero\studio\19.0\include\windows\rtl\System.Classes.hpp:1958'
edytowany 1x, ostatnio: cerrato
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

Ma być WideString, zwyczajnie skonwertuj.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Paweł Górski
  • Rejestracja:ponad 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:16
0

Ja dane otrzymuję w postaci:

Kopiuj
 AnsiString WKBstr("0133212123421");

jest przykład: http://programowanie.cal.pl/cyfbar/curious.html

gdzie wydawało mi się jest rozwiązanie mojego problemu:

Kopiuj
 void StringToComponent(TComponent *c, AnsiString as)
{
 TMemoryStream* pms = new TMemoryStream();
 TStringStream* pss = new TStringStream(as);

 try
 {
  ObjectTextToBinary(pss, pms);
  pms->Seek(0, soFromBeginning);
 }
 catch(...)
 {
  ShowMessage("Błąd strumienia danych");
 }

 pms->ReadComponent(c);
 delete pms;
 delete pss;
}

ale funkcja: ObjectTextToBinary(pss, pms); wywala wyjątek.
Nie wiem już jak to poprawnie wykonać.

edytowany 1x, ostatnio: cerrato
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0
Kopiuj
void StringToComponent(TComponent *c, AnsiString as)
{
 TStringStream *pss=new TStringStream(as);
 pss->ReadComponent(c);
 delete pss;
}

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.