Aktuelle Zeit: 18.12.2018 21:00

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 12:08 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Hallo,

letztens habe ich mich wieder geärgert, weil ich hier im Forum ein sehr interessantes Programm/Projekt gefunden habe, die zugehörigen, verlinkten Dateien aber aufgrund des Alters des Threads schon nicht mehr funktionierten (also die links waren kaputt).

Das kommt ja immer wieder vor, weil die Hoster, auf denen die Dateien liegen, diese nicht bis in alle Ewigkeiten speichern.

Um das zu umgehen, habe ich ein kleines Tool entwicklet, welches binäre Dateien in einen Base64 Kodierten String wandelt und das ganze mit ein wenig Programmcode aufbereitet, so dass der gesamte String (eigentlich Programmcode) per Copy/Paste in den PB Editor geworfen werden kann und die binäre Datei nach dem Programmstart erzeugt wird.

"Bin to Post" (Bin2Post) habe ich es genannt.

Bild Bild

Hier mal ein Beispiel:
Kalle postet sein neusten PB-Programm. Den Quellcode packt er in die bekannten "[CODE ]" Tags hier im Forum.
Was ist aber mit dem Programmicon oder einer anderen binären Datei, die zu dem Programm gehören?

Dazu dropt Kalle seine binäre Datei einfach in das Fenster von Bin2Post und erhält nach kurzer Umwandlungsphase einen Text, der die kodierten Daten und einen PureBasic-Dekoder enthält.
Diesen Text kopiert er mit dem Button 'Copy text to clipboard' in die Zwischenablage und kann ihn von dort direkt als zweiten "[CODE ]" Block in seinen Forumspost kopieren.

Interessenten, die sich seinen Post durchlesen, können nun diesen Code aus dem Browser kopieren und in den PureBasic Editor werfen. Dann einfach nur F5 drücken. Es erscheint ein Save-Filerequester, in dem man angibt, wo die Datei gespeichert werden soll.
Der Dekoder speichert die Datei im ursprünglichen binären Format auf der Festplatte im ausgewählten Verzeichnis. Fertig.

Das ganze ist umso sinnvoller, je mehr Leute es explizit benutzen. Ich hoffe, dass Euch die Idee gefällt und Bin2Post hier im Forum eingesetzt wird.

Der Code ist gestern Abend entstanden und in puncto Geschwindigkeit sicherlich noch optimierbar, da die Kodierung direkt mit Stringvariablen realisiert wurde. Der Dekoder arbeitet dagegen mit einem Memoryblock... was *whoooooshh* blitzschnell geht (eine Dekodierungszeit ist quasi nicht spürbar).
Generell ist das Tool nicht für riesige Dateien geeignet (wir wollen ja auch nicht den Speicherplatz des Forums mit Hundertmegabyte großen Datazeilen zumüllen). Ich habe ein internes Limit für 500 KB vorgesehen, Dateien über dieser Filegröße werden nicht mehr dekodiert. Da ich aber den Source hier reinstelle, könnt ihr Euch natürlich alles selbst anpassen.

Die wichtigen Parameter in Form von Konstanten sind folgende:
Code:
#Rowlen      = 100         ; Zeilenbreite der generierten Datazeilen in Zeichen
#MaxEntries  = 10000       ; Maximale Anzahl der im Editorgadget angezeigten Zeilen ('Copy text to clipboard' kopiert aber immer den ganzen Text)
#MaxFilelen  = 500000      ; Maximale Größe der zu konvertierenden Datei in Bytes
#RefreshRate = 532         ; Anzahl bearbeiteter Bytes bis der Statustext (x von y Bytes) refreshed wird


Und hier nun der Quellcode (das zugehörige Icon gibts dann darunter im Bin2Post Format ;) )

Anm.: Ach so. Ich bin nicht so der Wahnsinnsheld was die englische Sprache betrifft. Bzgl. meiner Formulierungen im Programm würde ich mich über Feedback/Korrekturen freuen.

Edit 05.01.2017: Ich habe das Programm aufgrund der aktuellen Posts in diesem Thread Unicodefähig gemacht. Wer alte, bereits kodierte Daten auch unter PB 5.50+ korrekt dekodiert haben möchte, der tauscht in dem Fall einfach die Dekodier-Routine über den Data-Zeilen gegen die aktuelle Routine aus (z.B. die, die in dem CODE Block mit dem Programmicon zu finden ist, siehe weiter unten hier im Post).

Edit 06.01.2017: Ich habe die Dekoderroutine etwas verkürzen können. Es gibt nun keine Datazeilen und keine DataSection mehr. Daten und Dekoder sind nun allerdings nicht mehr als Blöcke klar getrennt, das ist aber nur ein optischer Aspekt. Die Funktion ist die gleiche wie vorher.

Code:
;*************************************************************************
;*
;* Bin2Post
;*
;*************************************************************************
;*
;* Programname       : Bin2Post
;* Filename          : Bin2Post.pb
;* Filetype          : Main [Main, Includefile, Datafile]
;* Programming lang. : Purebasic 4.61+
;* String-Format     : Both [Ascii, Unicode, Both]
;* Platform          : Windows [Windows, Mac, Linux]
;* Processor         : x86 [x86, x64]
;* Version           : 1.02
;* Date              : 06.01.2017
;* Autor             : Markus Haacke
;* -----------------------------------------------------------------------
;* BESCHREIBUNG:
;*
;* ...
;*
;* -----------------------------------------------------------------------
;* Historie:
;* 1.02 - add 06.01.2017: Dekoderroutine verkürzt
;* 1.01 - fix 05.01.2017: Programm Unicodefähig gemacht.
;* 1.00 - rel 22.01.2013: Erste Version
;*************************************************************************

EnableExplicit

Structure Settings
   sFilename.s
   iFilesize.i
   iBase64Size.i
   *MemoryBuffer
   *Base64Buffer
   sText.s
EndStructure

#Version     = "V. 1.02 - 06.01.2017"

#Rowlen      = 110         ; Zeilenbreite der generierten Datazeilen in Zeichen
#MaxEntries  = 10000      ; Maximale Anzahl der im Editorgadget angezeigten Zeilen
#MaxFilelen  = 500000      ; Maximale Größe der zu konvertierenden Datei in Bytes
#RefreshRate = 500         ; Anzahl bearbeiteter Bytes bis die Statusanzeige (x von y Bytes) refreshed wird

Define iEvent.i, iEventGadget.i, iEventType.i, iQuit.i
Global Bin2Post.Settings

;*************************************************************************
;* Procedures
;*************************************************************************

Procedure   Convert(sFilename.s)
   ; +-----------------------------------------------------------------
   ; |Description  : Beschreibung der Prozedur
   ; |Arguments    : sFilename: ...
   ; |Results      : -
   ; |Remarks      : -
   ; +-----------------------------------------------------------------
   Protected j.i, iLength.i
   
   iLength = #Rowlen
   Bin2Post\sText = ""
   
   Bin2Post\iFilesize = FileSize(sFilename)
   If Bin2Post\iFilesize > 0 And Bin2Post\iFilesize <= #MaxFilelen
      Bin2Post\MemoryBuffer = AllocateMemory(Bin2Post\iFilesize)
      Bin2Post\Base64Buffer = AllocateMemory(Bin2Post\iFilesize * 1.5)
      
      If Bin2Post\MemoryBuffer > 0 And Bin2Post\Base64Buffer > 0
         If OpenFile(0, sFilename)
            If ReadData(0, Bin2Post\MemoryBuffer, Bin2Post\iFilesize) > 0
               
               SetGadgetText(1, "> Converting to Base64 Format")
               Bin2Post\iBase64Size = Base64Encoder(Bin2Post\MemoryBuffer, Bin2Post\iFilesize, Bin2Post\Base64Buffer, Bin2Post\iFilesize * 1.5)
               
               ; Header erzeugen
               Bin2Post\sText = ";*******************************************************************************************************" + Chr(10)
               Bin2Post\sText + ";* This PureBasic source was generated by Bin2Post, a file converter for sharing binary files in text" + Chr(10)
          Bin2Post\sText + ";* based forums. See here for more information http://www.purebasic.fr/german/viewtopic.php?f=11&t=26298" + Chr(10)
               Bin2Post\sText + ";* Copy & paste this code into your PureBasic IDE and run it via F5 (PB Version 4.31+ is needed)." + Chr(10)
               Bin2Post\sText + ";* You will be asked for a directory where the original binary file will be created." + Chr(10)
               Bin2Post\sText + ";* Filename: " + GetFilePart(sFilename) + " - Binary filesize: " + Str(Bin2Post\iFilesize) + " - Base64 encoded size: " + Str(Bin2Post\iBase64Size) + Chr(10)
               Bin2Post\sText + ";*******************************************************************************************************" + Chr(10)
               Bin2Post\sText + "Macro D:T$+:EndMacro:L=" + Str(Bin2Post\iBase64Size) + ":" + "F$=SaveFileRequester(" + #DQUOTE$ + "Save file" + #DQUOTE$ +"," + #DQUOTE$ + GetFilePart(sFilename) + #DQUOTE$ + "," + #DQUOTE$ + "All (*.*)|*.*" + #DQUOTE$ + ",0):If F$<>" + #DQUOTE$ + #DQUOTE$ + Chr(10)
               
               ; Datenblock erzeugen
               For j = 0 To Bin2Post\iBase64Size Step #Rowlen
                  If j % #RefreshRate = 0
                     SetGadgetText(1, "> Generating data blocks [" + Str(j) + " / " + Str(Bin2Post\iBase64Size)+ "]")
                     While WindowEvent() : Wend
                  EndIf
                  If j + #Rowlen >= Bin2Post\iBase64Size : iLength = Bin2Post\iBase64Size - j : EndIf
                  If iLength > 0
                     Bin2Post\sText + "D" + Chr(34) + PeekS(Bin2Post\Base64Buffer + j, iLength, #PB_Ascii) + Chr(34) + Chr(10)
                  EndIf
               Next j
               
               ; Footer erzeugen
               Bin2Post\sText + "I$=T$:PokeS(@I$,PeekS(@T$),-1,#PB_Ascii):OL=Base64Decoder(@I$,L,@T$,L):If CreateFile(0,F$):WriteData(0,@T$,OL)" + Chr(10)
               Bin2Post\sText + "CloseFile(0):EndIf:EndIf" + Chr(10)

               
               If Bin2Post\iBase64Size > #MaxEntries
                  SetGadgetText(0, Left(Bin2Post\sText, 4096) + Chr(10) + "... and so on" + Chr(10) + "Please use the button 'Copy to clipboard' to get the complete text.")
                  SetGadgetText(1, "> Converting finished [partially preview] (" + Str(Bin2Post\iBase64Size) + " Bytes total)")
               Else
                  SetGadgetText(0, Bin2Post\sText)
                  SetGadgetText(1, "> Converting finished [full preview] (" + Str(Bin2Post\iBase64Size) + " Bytes total)")
               EndIf
               
            EndIf
            CloseFile(0)
         EndIf
         FreeMemory(Bin2Post\Base64Buffer)
         FreeMemory(Bin2Post\MemoryBuffer)
      EndIf
   ElseIf Bin2Post\iFilesize > #MaxFilelen
      SetGadgetText(1, "> Filesize exceed the limit of " + Str(#MaxFilelen) + " Bytes!")
   EndIf
   
EndProcedure

;*************************************************************************
;* Main
;*************************************************************************

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 380, 220, "Bin2Post Converter " + #Version + " by Kurzer", #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
   SmartWindowRefresh(0, 1)
   
   EditorGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 35, #PB_Editor_ReadOnly)
   SetGadgetColor(0, #PB_Gadget_BackColor, $F2F2F2)
   EnableGadgetDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
   TextGadget(1, 10, WindowHeight(0) - 17, WindowWidth(0) - 120, 15, "> Drop a file into the light gray area to convert.")
   ButtonGadget(2, WindowWidth(0) - 110, WindowHeight(0) - 20, 100, 18, "Copy to clipboard")
   
   Repeat
      iEvent = WaitWindowEvent()
      iEventGadget = EventGadget()
      iEventType = EventType()
      
      Select iEvent
         Case #PB_Event_SizeWindow
            ResizeGadget(0, 10, 10, WindowWidth(0) - 20, WindowHeight(0) - 35)
            ResizeGadget(1, 10, WindowHeight(0) - 17, WindowWidth(0) - 120, 15)
            ResizeGadget(2, WindowWidth(0)- 110, WindowHeight(0) - 20, 100, 18)
         Case #PB_Event_GadgetDrop
            Select iEventGadget
               Case 0
                  If EventDropType() = #PB_Drop_Files And EventDropAction() = #PB_Drag_Copy
                     Bin2Post\sFilename = StringField(EventDropFiles() + Chr(10), 1, Chr(10))
                     Convert(Bin2Post\sFilename)
                  EndIf
            EndSelect
         Case #PB_Event_Gadget
            Select iEventGadget
               Case 2
                  SetClipboardText(Bin2Post\sText)
                  SetGadgetText(1, "> The complete text was copied to clipboard (" + Str(Bin2Post\iBase64Size) + " Bytes total)")
            EndSelect
         Case #PB_Event_CloseWindow
            iQuit = 1
      EndSelect
   Until iQuit = 1
EndIf

End


Hier das Icon (auch unter Unicode dekodierbar):
Code:
;*******************************************************************************************************
;* This PureBasic source was generated by Bin2Post, a file converter for sharing binary files in text
;* based forums. See here for more information http://www.purebasic.fr/german/viewtopic.php?f=11&t=26298
;* Copy & paste this code into your PureBasic IDE and run it via F5 (PB Version 4.31+ is needed).
;* You will be asked for a directory where the original binary file will be created.
;* Filename: Bin2Post.ico - Binary filesize: 3774 - Base64 encoded size: 5032
;*******************************************************************************************************
Macro D:T$+:EndMacro:L=5032:F$=SaveFileRequester("Save file","Bin2Post.ico","All (*.*)|*.*",0):If F$<>""
D"AAABAAEAMDAAAAEACACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAEAwQAB4N0AJSEdwAOzbYAfIKEAA"
D"ekigBFxa8AEkQyAGRqbAAEg/wAFHK0AASt/ABM6qQABGdKACyEcAAspJEADuXMACRmNAAskmwAM7KLACzClACExsQAZOPMACZlXAAswuwAZMK8"
D"AEnj2QBEwvwAJoTlACrVvgAsXjwALKrUABRWXAAplZQADFY8ACmFgAA1pIkAR9S+ACu0nwAkdGIAnKKZADrEqgAqtfoAzNLUALWFiwBR9t8AKH"
D"NPADe1ogA3xLQALJ68ACyLcQA1lH8ADCgQADV+agAElfcAFGbkAFL0wgAhVDgAVtTEAJaUigArpfAANKSsANfu9wAHk3kANryjACJ07wAsq/AA"
D"JHKEAB5VRgA2rZcAJ2VPAAe1lwBW4soAK31pADjTsADv8ewAKGtRAEymnAAcRTAABHJUADSFbwA84rwATNbkACyM6QArrJYAWOvYADSdjQBJ28"
D"QAUf7sADjMuQBIrugAK5uDADnMpgAkLiwAmJ2TABqaiAA3va0AI33oAETKnABk+twAPNTgABeY9wAhXEgAPNq/APz+3AArjHwAKpP0ADScgwAQ"
D"LkQANKzzAAweBACMbGAAGoXnAEjkyAA1ppYAN7PxAFT85AApnPoAHKKUAAS0/ACc4tQAJmxeACx1YQA0eEwANItzAAQ0IAA0o/kACJyCADnUwg"
D"C0wsQABN7MAGTcvAC0vrwAhP7wAOzm5AA08twAlN7UAJR+oAAEwvwAFGKEAGzO/AAEefUABQM1AAR8YABMTkQARLuqAByEaABsdnQAnMbcAMjm"
D"7AActpwAE+/bALzW5AAcbmAAWMr4ACReXACUe20AfNLMABp1YgB8/uAAlIKkABii8AA3wvEAfM7EABy2/AA0PjwAHHJUAARKLABJ2fEAROL8AD"
D"ri0gBY5vgARrz0ACR+nAA3u4cAZO7EAARu/ABY/sAA/PX0AEzO4AArnY0ACLysADnczAAMDkwAKsa0AESypAAUTkwAFH7kAASNcQAJnu8AWNvD"
D"AB5NNAAcHiQADFqEAASM9wDEhIQAFDUgANTe4ACVi30ABquOAEvr1wAsvKcAIVw8ACx+dgBU68QAROzEADy89wA8zvkANO7cACx98QAUcuQA5P"
D"L4ACz+5ABk/PAAdO7cACTO7AA0rqQAnNLsAJuOpABUxqwAK5SAACyWrAA0hX4AXPPYAJySpAA0ZlQACLaoAFz9+ABFzLYA/P78ADSW7ABU1vwA"
D"R835ACx6TADs9vQASLb0ABx6dAAEu/wAlP78AHzO7AAczrwANGxUADSMfAAEAiQAVK6kAAR+/AAcvrQAHHo8AAReRwCsopwAtIqMABQuHABO3t"
D"oACDokAHR+hAAU9twAw8YCnJycXl5eXl4CxsbGxl5eXl5eApxeOzvGb2+cnAKcnAICxsY7XigoKF7a4NosxseP+Pinl/+Xl5dHj38/x/8QEIKX"
D"P/gQAwMDAP34Dad9x3+8fwVHENR37Qt3d+3gxscuZkZMDqqAgICqYCdJ2IAdMDBZybkwQGBVAH00ACfVWCcyW2sPXPxlPDw8Qu3axsdmvzlJOd"
D"C2WYBZtoBEYB1ZuDAwMLgmYEAtAAD9cWNjYHp8a2sUzax1PDxCPHfgxkdMTEZQNVsagFm4WYCAgFkwuGDJYNhUL5HIAEnfVRbV7ElrayQpsTw8"
D"PG08Qnfaxn9QUEl8M0zQWYC4WR1ZWbgwMMkwMFQPLzBXkVVXvoPnpnxrW1tcVWo8Qm08PHfgAn8yEg4OEkkvgLgwgDBZuFlgyWDY2FRgVDDkWS"
D"XkFhZ16TIkVA/Ns3VCbTw8PHfaAg3hNQ58azNJtjC4MFlkMC/dy3lmeXl5aTAlBjo6r84jDjNbJFQ4rDxtPDw8PHfaOwNbkspGUHwHWSlgWdjL"
D"Rma/OXpJDkk1etwlOjq+vm1MEmskVEpjPDxCPDw8PAvaO7VgWVlZD9y/cskvtERERmZ5UFBJfA5JNWkvGr4WD0Lpa2skVFFVZTxtfh88PAvaO+"
D"JU2NgvyWBg2NgPZnouTDUODlAODiMODg7cVxaDH917a2skVFGzPEJCbTw8PAvgxgNgVCbYL9gPD1Z5RHxJUEkO8mkOfA4OfCMOIVXWKkkOayQP"
D"QAx+PDxtQjw8PAvaAk8wYNgm2A+0MyNODnwO6S5QMg7yDvIOSQ5pSYCiKi58W2skSsh1bUI8bTw8PHfaAo8XWSbYtDNpNXlOUHxMHklWUA4zDl"
D"BJI1AOUCFCzhFQJEUTXJp1QkJtbW08QgvaOwV68S8vVmnLy2bKfC7KRgYySQ5pSctQDlDySTJzohEyExNUSn5CQkJCbR9+bQvgnLzxLmYzISN6"
D"RgdG8hE5uVQ1DlAOUA4ODg5JDkncz0wzRVuuqDxCQkIfbTxCPHfaO38jeidG8np5FwcuScp5QFAOSQ5QIw5p8g7yDg56Ma0yW2trcipCbUJCQk"
D"I8bXfaO+IPW94jenkXyr81ejlADlBJNUlJaVDyaQ4zaTMySZsRRdwyDiHrQkI8Qm1CQnfgXrVWI8tJF0ZGB04zRiTcUA5JSUlQ8g4O8mlpaTLc"
D"fEm/UBNFtHwSom08Qm08QnfaO9C0DssnF0ZGB0ZFM1ZJUEkOSVAjMg7yI/Lc8iMzM1ZQB3pFRdxrVGCiPDxCQnfg4AHyPVB6eRcXxDMPaw5JfF"
D"BJDlAO8mlpDvIOM2ncIdy0M0ZJJBO0Wy9cZG08PHfg+S2efSOZF5tG+y8lDnx8DklQyw4OUA7yy1Bp3PLcM1a0MzOePRIv3ElZJVd1Qu3aiWXu"
D"hb7cujlE+wbcSQ4OSQ4Oyw4ONUkODmkz3N5WclRgyS8yeSNWKWsyUd9tdXfgoLA3Wp/fRZ5OeTAOUFB8Dg4OUA4ODvK0D0VyD3JUQGApWSkhMy"
D"dDW1xJZ8zOPHfaiY1h0tLrVb4wWWB8DmlpNWlQafIzDyRFQEBFMMnJQMlZWVkkazMXIXJnQHFSZe3aoPUcHBxBQVOoRQ568kW0UA7yM2tra95p"
D"M1ZAV83ILchxWXFFDlvyB94a5K5XdXfgifVhHBwc0dFkSUzxMiYwVHJQRl3z846Ot46O8/NsIJ4GyFiRMjMkv0RAZ+QUc3faoPUcHBxTHEIT6U"
D"Yi5CUlckQHustWBlwpMEpcJVxZL3JbDid5ZlAzRk5FcSVMzwvgoPUcHBxT0c9JRr9QLVchZt4ztFYz3CRFRS9ALzBZXDAwSoCARaZGRvtbLd/3"
D"qQvaiQkcU9EccFcRRr9NYHp6VmkO8hJrDw8kQC9AQFzkMFxZWUiAyCmbZjTcdORbzwvgoI0cYVNhda7hvwdFaQ7LMzJFM1YzW2skD0BcWQZZKS"
D"VXV1dIVVUOScQzWMuuKnfaifVhHBxhc65mbrm2MHJFJmBAW2szEiRrRUVA5CUw5CXkV0hIvqpFa3oO44sMPHfgoI1hcBxB6BPKxONjVRpXBpFr"
D"a1tra2skRUUpXCklXDAlJUiAV1dxRUmS48E4QnfaifVhYRxh62I5J+MvL0UpMC8PJNxraVvcE1TkWUDkMClcV1dISEjf5EUudAqxPHfgifVhHB"
D"xwQTjKM1dpaXLkkSVgkTNba2trJC9A5EAlWeQlJVdXvswauKu0LXUqPHfaoPW7HBwcQauSLxrcWw4PkeSRRWvcJFZrJEBAJUAGSiVXV1Fxzahq"
D"PDw8QjxCQu3giQlhHBwcHFOfV0hgRUW0MGAlKdhrM9xrD0BA5FlXVyUduJ1412U8Qn5CfkJtQnfgifVhHBwcHEFqhThXMDC4JtxpMzNWa2szJC"
D"8vKSUp5JZFS7Llc2VCQm1tQkJCQnfgoPVhHBwcU1NhHOhjHdsV9A0B3A5bM1bcJEBAKUBUvE3l5YHllTZCbUJCQm1CQu3goI0cHBxTHFMcHGFq"
D"14ZL5eWjfwUP3NwzVkVFMyR/TeXl5QDlaMJCQkJCQkJtQu3aiY0cHBwcU1NTU1PRu0vlPuXl5YgFX1YP3FZWtF+05eXlBADl5cJtQkJCbUJCQu"
D"3aoPVhHBwcHFNTU1NTHGjlAOXl5eXlyX8PViRyX1/l5eX+AADlaMJCQm1CbUJtQnfgiY0cHBwcU1NTU+ZTjWjlkwDA5eXl5RkFIQ8PAZXl5eoA"
D"AADl771tHzxCbW1CQu3goI1wHBxTHFNTU1NTsD7lhAAApSvl5eV2WzMj7LJL5QAI5eXlNjxCQkJtH0JCQu3aifVhHBwcU1NTU+ZTu3Dl5ZAAXQ"
D"DF5eX2gCVKHcWy5eXl5dO9oR9CQkJCKm1tQnfgifXRHBxTHBxTU1NTanBT0+Xl5eXlPnC9zxoapDZalJjZ672hbTxCQkIfbUJCQu3giY31CQnC"
D"wsI2wjY2NjbCCb2sjJoLwr0LCwsLd3cLCwsLC3ft7e3t7e2K7Xft7YrawywsLCwsLCwsLCwsLCws+iwsLCwsLPosLCws+vr6+iz6+vr6LPr6+v"
D"r6+vr6+vrDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
D"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
D"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
D"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
D"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
I$=T$:PokeS(@I$,PeekS(@T$),-1,#PB_Ascii):OL=Base64Decoder(@I$,L,@T$,L):If CreateFile(0,F$):WriteData(0,@T$,OL)
CloseFile(0):EndIf:EndIf

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Zuletzt geändert von Kurzer am 07.01.2017 01:24, insgesamt 11-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 12:31 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright:

Nette Idee, aber im Endeffekt wird der Text unnötig Fett. Aber das soll dann jeder für sich entscheiden.
In Form von Datazeilen, die optional auch gepackt werden können finde ich es praktischer. Entsprechender
Crossplattform Source hier: http://www.purebasic.fr/english/viewtop ... 83#p374183
und von Stargate gibts es auch noch was ähnliches.

Sei nicht böse, aber das war evtl. unnötige Arbeit.

Gruß
Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 12:39 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Nein Thomas, ich bin Dir nicht böse. ;)
Dein Bin2Data Konverter kannte ich vorher bereits.

Die Kodierung in Form von hexadezimalen Datazeilen ($2090D6FC,$... usw.) ist definitiv nicht schlanker als die Umsetzung mit einem Base 64-String.
Du brauchst bei Hexzahlen ($2090D6FC...) mindestens 2 Bytes (16 Bit), um ein binäres Byte zu kodieren. Base64 kodiert mit 7 Bit, also hast Du maximal 1 Bit Overhead (9 Bits) im Result. Nicht umsonst braucht der Zielbuffer einer Base64-Kodierung nur max. 33% größer sein als der Quellbuffer.

Dass die Datei, die man konvertiert, im Idealfall bereits ZIP Komprimmiert sein sollte, habe ich mal vorausgesetzt. ;)

Als eigentliche Nettigkeit an dem Programm empfinde ich halt den integrierten Dekoder. Als "Zielperson" kriegt man damit wirklich schon den Popo geputzt und muss sich nicht mit irgendwelchen Downloadportalen herumschlagen.

Aber nett, dass Du es nett findest. ;) Danke.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 12:48 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Du vergißt aber, das bei Deiner Variante die Exe aufgebläht wird. Mag sein das der Quellcode
sogar kleiner ist, die Exe ist grösser und muss zur Laufzeit decodiert werden, was das ganze
noch minimal verlangsamt. Die Cypherlib muß dann auch noch zur Exe gelinkt werden ...
Wieviel das ganze genau ausmacht, müßte man erstmal testen, aber das es was ausmacht
ist sicher :wink:

Gruß
Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 12:52 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Welche Exe meinst Du denn da die ganze Zeit? :)

Es geht hier nur darum, dass ich Dir nen schönes Bild oder eine kurze Sounddatei mit in den Post werfen kann.
Ein PB Programmcode sollte natürlich weiterhin als Text [CODE ] [/CODE ] gepostet werden.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 13:05 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Achso meinst Du das, ich erstelle mir dann die Binärdatei daraus und füge es dem Source hinzu oder
höre mir die Musik nur an usw.
Etwas umständlich, aber so macht es doch Sinn und man spart hier etwas von den 64 KB mögichen
Text ein.

Also kein Ersatz für IncludeBinary?

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 13:08 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
ts-soft hat geschrieben:
Also kein Ersatz für IncludeBinary?

Konkretamente :allright:

Eher ein Ersatz, um sich das Hochladen solcher Dateien bei fastshare.org, rapidshare.com oder ichloeschdeinedateiineinememonatehwieder.de zu sparen.

Man könnte damit natürlich auch einen kompletten (gezippten) PB Projektordner transferieren, dann wird es noch einfacher für den Forumslesenden Interessenten.
Einfach den Text aus dem Post dekodieren... da fällt dann hinten eine Datei raus ("Ts-Softs_neustes_Projekt_fuer_alle.zip") und wenn man das ZIP dann auspackt, hat man den Sourcecode, die Icons, die Grafiken für Buttons usw. und die Projektconfigdatei fein säuberlich in einem Verzeichnis liegen und muss das Projekt nur noch in den Editor laden. Kein Fummeln, kein Konfigurieren.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 14:01 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
nettes Programmierdemo :allright:
aber für mich eher ein Spamverteiler für nicht ganz unbegabte. :mrgreen:

Es ist ja vermutlich nicht ganz unbedacht so, dass ein Fileupload hier auf dem Board genau nicht konfiguriert ist.
(Kostet immerhin alles Platz und damit Geld)

Da man seine (dann eher mickrigen) Ressourcen grundsätzlich immer als DataSection in den Code integrieren kann (s.o.)
ist das nur "noch so ein Tool", dass Daten darstellbar macht. /:->

_________________
‮pb 5.31-3.30(x86) (windoof)7 64 pro
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 14:13 
Offline
Benutzeravatar

Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg
Grundsätzlich hast Du natürlich recht, bobobo, aber es halten sich leider nicht alle an diese Prämisse, ihre Ressourcen als Datawüste an den Code zu hängen. Abgesehen davon ist dabei der Blähfaktor leider noch ungünstiger ist als bei der hier verwendete Base-64 Kodierung (s.w.o.).

Aber wie Thomas schon sagte, das muss jeder für sich entscheiden. Ich finde es halt praktisch eine Datei mit copy - paste - F5 zu erzeugen. Und den Effekt zu haben, das sie immer vefügbar ist, solange der Post nicht gelöscht wird.

_________________
"Never run a changing system!"
PB 5.62, OS: Windows 7 Pro x64, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Ich bin Baujahr 1968, also aktuell 50.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Bin2Post / Binäre Daten gleich im Forumspost mitliefern
BeitragVerfasst: 23.01.2013 14:33 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Kurzer hat geschrieben:
Abgesehen davon ist dabei der Blähfaktor leider noch ungünstiger ist als bei der hier verwendete Base-64 Kodierung (s.w.o.).

Das gilt aber wirklich nur für den Source, wenn ich es kompiliere sieht es umgekehrt aus. Und ich denke, das wird dann
das meiste vorgehen sein.
Ein kompiliertes Programm mit einer DataSection im Hexformat oder mit einer Resource als IncludeBinary eingefügt,
unterscheidet sich nicht um ein Byte in der Grösse. Deine Kodierung macht das Programm um 33% grösser + die Encode
Lib, die hinzugelinkt wird.

Für die direkte Nutzung also eher ungeeignet oder eben umständlich auf Festplatte wiederherstellen und dann einbinden.
Ist halt mehr Arbeit.

Aber wir bewegen uns im Kreis. Es wird wohl Anwendungsgebiete geben, hoffe ich mal für Dich.

Gruß
Thomas

_________________
PureBasic 5.70 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 19.0 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 50 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye