Plik .ico do stringa

WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

Czy widzicie jakieś zagrożenie w takiej konwersji:

Kopiuj
{ w array bajty małej ikony 256 bajtów chodzi o plik językowy więc jest to flaga przełączająca język. W pozostałych wierszach bazy umieszczone są komunikaty i opisy itd..dlatego stringi. }
// pętla:
S:=s+chr(array[x]);{ zapisanie ikony w wierszu prostej bazy
I odwrócenie przez:}
//Pętla:
Array[x]:=s[x];{ odtworzenie pliku ikony w katalogu, czuję coś nosem że kodowanie znaków może coś mi przekręcić…}
edytowany 1x, ostatnio: Windowbee
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:13 dni
0

Tak, zagrożenie bezmyślnego stukania w klawiaturę, bezmyślnego zadawania pytań, bezmyślnego trollowania.
Czym jest s?
Czym jest array, czy rozumiesz że to słowo kluczowe?
Czym jest Aray, czemu po pętli nie napisać zwyczajnie: Aray:=s;?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Zobacz pozostały 1 komentarz
WI
Myślę i projektuję na kartce sposoby zanim zacznę pisać projekt dlatego takie pytania. Jeśli źle wymyślę teraz działanie pewnych funkcji to będę miał znacznie więcej pracy później. Nie mam Twojego poziomu.
GS
@_13th_Dragon: ... "Tak, zagrożenie bezmyślnego stukania w klawiaturę, bezmyślnego zadawania pytań, bezmyślnego trollowania.". Nie każdy ma taką wiedzę o programowaniu jak Twoja , ale to nie daje Ci prawa aby użyć takich słów. Forum jest dla wszystkich !!!
WI
Koniec ,pls nie denerwować się już nie po to piszę 🥹
_13th_Dragon
W takich przypadkach rzuca się cały kod (przynajmniej funkcje) bez żadnych komentarzy. Kod się czyta jednym spojrzeniem, komentarze trzeba jeszcze rozczytać tym bardziej tak mało sensowne.
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 9 godzin
0

@Windowbee:
domyślam się masz na myśli jakiś dwukierunkowy sposób konwersji danych binarnych na stringa ??

_13th_Dragon
Wow, rzucasz się w obronie poszkodowanych a sam nie wiesz co odpowiedzieć?
WI
  • Rejestracja:ponad 7 lat
  • Ostatnio:3 miesiące
  • Postów:138
0

@grzegorz_so:
Tak dokładnie pominąłem całe dwie funkcje kodu bo po co zaśmiecać … w nawiasach podałem opis, widocznie nie dość zrozumiale.

Nie wiem w jaki sposób bardziej skrótowy napisać że planuję przenieść bajty z pliku ico do znaków w stringu.
Pokazałem tylko pojedynczy krok w pętli plik—> string
I odwrotnie string —> plik

Nie pokazywałem już przecież przenoszenia tablicy bajtów do pliku ani z pliku do array.

Pisanie całej funkcji zaśmieci ekran. Więc uznałem że wrzucę skrót myślowy.

Wiem jak to zrobić nie znam tylko zasad kodowania znaków , czy nie wystąpi wyjątek że bajtowi nie odpowiada znak albo jest specjalny i też będzie problem.
Ten string ma
Przenosić informację tylko, nie będzie wyświetlany.
Mam proste bazy danych o podobnym schemacie jak pliki csv(wiersze stringów, komórki oddzielone separatorem) i w jednym miejscu chcę umieszczać ikonę, żeby jako string na zapytanie klienta przesłać ją przez port.
Żeby bałaganu nie było nie chcę tworzyć dodatkowych ikon w katalogu wersji językowych.

edytowany 4x, ostatnio: Windowbee
Zobacz pozostałe 8 komentarzy
WI
Jeśli wpiszesz dowolnie coś czego nie ma to zwróci błąd ,że pliku nie ma w katalogu. Przecież najpierw sprawdzam na poziomie serwera if fileexists(katalog+path) then begin…. End else komunikat że nie ma. Czy można podać wsteczną ścieżkę w path? Powyżej ‚katalog’? Tzn teraz zdurniałem ale myślałem zawsze że adres taki jest zawsze zstępujący.
WI
Path jest wysyłane przez klienta przez polecenie: #send_file:source_path,dest_path
WI
Chodzi mi o to że wszystko co jest poniżej ‚katalog’ śmiało można hakować i zabierać. Wiec nie ma znaczenia.
_13th_Dragon
Doprawdy? Wiesz że będzie można przyjąć twój serwer?
WI
Znalazłem wsteczne /../ że takie coś jest 🤦🏻‍♂️Nie użyłem nigdy. Ale mogę to wyrzucić z poleceń (aby kropki nie przepuszczało jeśli nie jest przed rozszerzeniem pliku, wstecznych itd). Wiem ,że w pewnych rzeczach moja niewiedza jest porażająca w programowaniu ale o dziwo programy dla mnie działają tak jak chcę finalnie. Ten jest pierwszy sieciowy.
GS
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 9 godzin
1
Kopiuj
function getBytesFromFileAsAnsistring(aFilename: string): ansistring;
var
  ms: TMemorystream;
begin
  result:='';
  ms := TMemorystream.Create;
  try
    ms.LoadFromFile(aFilename);
    setlength(result, ms.Size);
    ms.Read(result[1], ms.Size);
  finally
    ms.free;
  end;

end;

to jeden z wielu sposobów na rozwiązanie Twojego problemu

edytowany 3x, ostatnio: grzegorz_so
WI
Dzięki jutro poćwiczę te streamy całe :)
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:13 dni
2

Otwierasz połączenie jako strumień, przeważnie w IOHandler, otwierasz plik i jednym poleceniem:
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Copying_Data_From_One_Stream_To_Another

Dla umieszczenia w pliku tekstowym:
EncodeBase64
DecodeBase64
działające wprost na strumieniu.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
dasej
  • Rejestracja:prawie 22 lata
  • Ostatnio:3 miesiące
  • Lokalizacja:Słupsk
1

Witam.

Kopiuj
procedure TForm6.Button2Click(Sender: TObject);
var FStream : TStream;
var txt : String;
var MStream: TMemoryStream;

function MemoryStreamToString(M: TMemoryStream): AnsiString;
begin
  SetString(Result, PAnsiChar(M.Memory), M.Size);
end;

begin
     MStream := TMemoryStream.Create;
     FStream := TFileStream.Create('mail.ico', fmOpenRead);
     try
         MStream.CopyFrom( FStream,  FStream.Size );
         txt := string(MemoryStreamToString( MStream ));
     finally
         FStream.Free;
         MStream.Free;
     end;
end;

@Windowbee, w zmiennej txt masz ikonę

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
2

@dasej: skoro używasz strumieni, to dlaczego nie TStringStream? ;)

Kopiuj
var
  Stream: TStringStream;
begin
  Stream := TStringStream.Create();
  try
    Stream.LoadFromFile('mail.ico');

    // "Stream.DataString" zwraca ciąg znaków.
  finally
    Stream.Free();
  end;
end;

Tyle tylko, że taki ciąg znaków będzie zawierał dokładnie to co plik ikony, czyli najróżniejsze znaki, w tym te kontrolne, nulle i inne badziewie. IMO lepszym rozwiązaniem będzie sugerowany wcześniej Base64, bo to przynajmniej będzie jak ciąg znaków wyglądało.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE

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.