Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Das was in PHP Base64 encode ist...?!


phogl - Fr 14.01.05 20:34
Titel: Das was in PHP Base64 encode ist...?!
Hallöchen erstmal!
In PHP gibt es ja die Befehle "base64_encode" und "base64_decode". das was die machen würd ich gern in delphi machen, weiss aber nicht wie... wär nett wenns mir jemand verraten würde ;)
danke schonmal


Coder - Fr 14.01.05 21:25

Ich glaube es würde das Raten erleichtern wenn du erklärst was diese Funktionen machen, da hier nicht jeder PHP kann :wink: (zum Beispiel ich. Aber ich hab mich schon für einen Kurs angemeldet :D )


phogl - Fr 14.01.05 21:44

Ich will dann nur mal diesen Link posten *g* http://de2.php.net/manual/de/function.base64-encode.php


BenBE - Fr 14.01.05 21:53

Das ist eine Suche bei Google MIME64-Encodierung, die von dieser Funktion vorgenommen wird.

Jeweils 6 Bits werden aus einem Datenstrom genommen und als ein ASCII-Zeichen aus "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+\" dargestellt (Reihenfolge weiß ich jetzt grad net genau ... Fehlende Bits werden durch 0en ersetzt, der letzte Viererblock wird durch =-Zeichen aufgefüllt ...


bms - Fr 14.01.05 22:42

Das ist Base64 Kodierung. Es gibt Indy-Komponenten die das können. Je nachdem welche Delphiversion du hast, hast du auch die Komponenten. Alternativ Indy Komponenten laden und installieren. Sonst gibt es auch Unis im Internet die das können.


phogl - Mo 17.01.05 18:15

Ich benutze D2k5 und D7, wär echt super wenn mir jemand erklären könnte wir ich das mache (von indy hab ich absolut kein plan und google hat nicht so wirklich was hergegeben) ich möchte nur das der, ich nenns mal base64 code von einer datei in ne memobox kommt und ich den code wenn ich den da reinkopiere auch wieder in ne datei verwandeln kann, das wär echt nett, danke schonmal


phogl - Mo 17.01.05 19:06

Schon ok, habs hinbekommen, trotzdem danke!


phogl - Mo 17.01.05 19:32

so, für alle die das mal suchen werden hab ich mal n ganz kleines proggi in nem nicht ganz perfekten aber wie ich finde sehr leicht verstänglichen stil geschrieben das ich hier jetzt poste:


project1.dpr
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.



Unit1.dfm
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
object Form1: TForm1
  Left = 192
  Top = 113
  AutoSize = True
  BorderIcons = []
  BorderStyle = bsSingle
  Caption = 'Form1'
  ClientHeight = 401
  ClientWidth = 857
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 0
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Encode'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 80
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Decode'
    TabOrder = 2
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 168
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Copy'
    TabOrder = 3
    OnClick = Button3Click
  end
  object Button4: TButton
    Left = 248
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Paste'
    TabOrder = 4
    OnClick = Button4Click

  end
  object Button5: TButton
    Left = 336
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Load'
    TabOrder = 5
    OnClick = Button5Click
  end
  object Button6: TButton
    Left = 416
    Top = 376
    Width = 75
    Height = 25
    Caption = 'Save'
    TabOrder = 6
    OnClick = Button6Click
  end
  object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 857
    Height = 377
    ScrollBars = ssVertical
    TabOrder = 1
  end
  object IdDecoderMIME1: TIdDecoderMIME
    FillChar = '='
    Left = 64
    Top = 128
  end
  object IdEncoderMIME1: TIdEncoderMIME
    FillChar = '='
    Left = 32
    Top = 128
  end
  object OpenDialog1: TOpenDialog
    Left = 96
    Top = 128
  end
  object SaveDialog1: TSaveDialog
    Left = 128
    Top = 128
  end
end



Unit1.pas
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdCoder, IdCoder3to4, IdCoderMIME, IdBaseComponent,
  ClipBrd;

type
  TForm1 = class(TForm)
    IdDecoderMIME1: TIdDecoderMIME;
    IdEncoderMIME1: TIdEncoderMIME;
    Button1: TButton;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    SaveDialog1: TSaveDialog;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  strm : TFileStream;
begin
  if OpenDialog1.Execute then begin
    strm:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
    strm.Seek(0,soFromBeginning);
    Memo1.Text:=Self.IdEncoderMIME1.Encode(strm);
    strm.Free;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  strm : TFileStream;
begin
  if SaveDialog1.Execute then begin
    strm := TFileStream.Create(SaveDialog1.FileName,fmCreate);
    Self.IdDecoderMIME1.DecodeToStream(Memo1.Text,strm);
    strm.Free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo1.SelectAll;
  Memo1.CopyToClipboard;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Memo1.Text:='';
  Memo1.PasteFromClipboard;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin
    Memo1.Text:='';
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  if SaveDialog1.Execute then begin
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
  end;
end;

end.


Ich hoffe das hilft irgendjemande, kritik is immer willkommen! ;)
hf
phogl

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.

Danke für dir Blumen, ich hab die tags so gesetzt wie ich die haben wollte :-/ und das funzt doch so, warum muss man das unbedingt ändern?!


Tomate008 - Do 19.07.07 08:59
Titel: DANKE!
DANKEEEEEEEEEEEE auch ich war auf der suche nach genau diesem und habe mich total gefreut das du nochmal das komplette projekt gepostet hast!! DANKE DANKE


arj - Fr 20.07.07 11:28

Nur so kurze Frage:
Mime ist nicht dasselbe wie Base64 oder?

Laut Wikipedia zumindest nicht.


BenBE - Fr 20.07.07 12:04

MIME an sich ist nur ein Standard, der die Übertragung von Daten auf Datenkanälen mit weniger als 8 Bit, sowie die vVerknüpfung von mehreren Datenströmen erlaubt. Z.B. in E-Mails. Siehe RFC 4648 [ftp://ftp.rfc-editor.org/in-notes/rfc4648.txt].