Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 08:45

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Bits in Datei schreiben

Discussion on Bits in Datei schreiben within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
Bits in Datei schreiben

Hallo Leute,

wollte jetzt grade das Thema Datein schreiben vertiefen. Hierzu wollte ich einzelne Bits in eine Datei schreiben und sie anschließend wieder auslesen.

Mit FileWrite() kann ich nur ganze Bytes schreiben. Geht es irgendwie anders?


lg
Butter
butter123 is offline  
Old 01/21/2012, 14:57   #2
 
Croco™'s Avatar
 
elite*gold: 235
Join Date: Jan 2012
Posts: 920
Received Thanks: 377
Schau dir mal
Quote:
StringToBinary
und
Quote:
BinaryToString
vl. ist es das was du meinst
Croco™ is offline  
Old 01/21/2012, 15:25   #3
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by butter123 View Post
Hallo Leute,

wollte jetzt grade das Thema Datein schreiben vertiefen. Hierzu wollte ich einzelne Bits in eine Datei schreiben und sie anschließend wieder auslesen.

Mit FileWrite() kann ich nur ganze Bytes schreiben. Geht es irgendwie anders?


lg
Butter
das hex-, wie auch das binärsystem sind doch nur unterschiedliche schreibweisen für zahlen o0

willst du eine binärzahl schreiben, wandle diese halt vorher in die entsprechende hexadezimale darstellung um.
lolkop is offline  
Old 01/21/2012, 20:49   #4



 
xShizoidx's Avatar
 
elite*gold: 0
The Black Market: 283/0/0
Join Date: Feb 2011
Posts: 1,351
Received Thanks: 410
Du möchtest einfach nur die Bytes von Dateien in eine Textdatei schreiben, habe ich dies richtig verstanden? Wenn ja, wieso nicht die ganze Bytesanzahl?
Du könntest den Pfadname der Datei auslesen, davon den String so spliten, dass nur noch der Dateiname überbleibt und anschließend die Bytes auslesen und dieses Beides in eine Textdatei schreiben.
Das könnte z.B. so in der Textdatei aussehen :
Dateiname "Beispiels.txt" Bytes "3151232"
Dann könntest du jede Linie einzeln mit _FileReadLine auslesen und die Infos mit _StringBetween herausfiltern um sie dann weiter zu verwenden.
xShizoidx is offline  
Old 01/21/2012, 21:37   #5
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
Nein, ich möchte wirklich nur die Bits schreiben Also keinen String mit "11011101" wo dann in der Datei mit Unicode das steht, sondern so dass wirklich die ganze Datei nur hier 8 Bits lang ist. Also so, dass mir der Texteditor warscheinlich garnichts anzeigt, weil er versucht daraus einen Buchstaben zu lesen. Und es muss auch keine txt sein, kann auch eine .auiawdb sein^^

@lolkop: kannst du mir ein Beispiel geben, ich wüsste jetzt nicht, wie ich das anwenden sollte^^
Datei im binary Modus mit FilOpen öffnen und dann was in Hex reinschreiben?
butter123 is offline  
Old 01/21/2012, 23:32   #6
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by butter123 View Post
Nein, ich möchte wirklich nur die Bits schreiben Also keinen String mit "11011101" wo dann in der Datei mit Unicode das steht, sondern so dass wirklich die ganze Datei nur hier 8 Bits lang ist. Also so, dass mir der Texteditor warscheinlich garnichts anzeigt, weil er versucht daraus einen Buchstaben zu lesen. Und es muss auch keine txt sein, kann auch eine .auiawdb sein^^

@lolkop: kannst du mir ein Beispiel geben, ich wüsste jetzt nicht, wie ich das anwenden sollte^^
Datei im binary Modus mit FilOpen öffnen und dann was in Hex reinschreiben?
8Bits sind 1Byte. Bytes kannste schreiben, wo ist das problem?
MoepMeep is offline  
Old 01/21/2012, 23:35   #7
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
willst du wirklich einen binären string in die datei schreiben, so musst du diesen string vorher in eine zahl umwandeln.

das könnte man zb mit einer einfachen rekursiven funktion machen. hier ein beispiel:
Code:
Func BinToDec($bin, $dec=0, $cntr=0)
	If $bin='' Then Return $dec
	Return BinToDec(StringTrimRight($bin,1), $dec+StringRight($bin,1)*2^$cntr, $cntr+1)
EndFunc

ConsoleWrite(BinToDec("11111110")&@CRLF)
somit hast du stets ein byte, welches du schreiben könntest. im normalfall hat man aber bereits die bytes gegeben, welche man schreiben bzw lesen möchte. da du ja die binären operationen auch nur über zahlen anwenden kannst, ist es unüblich mit strings von binären zahlen zu arbeiten.
lolkop is offline  
Old 01/22/2012, 00:03   #8
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
Ok, ich versuchs nochmal zu beschreiben

Habe die Datei test.abc . Wenn ich sie mit dem Editor öffne, steht da "abc" als String drin. Grundlegend besteht die Datei aber aus Bits. Hier insgesammt 24, also 3 Byte (ein Byte Pro Char). Jetzt will ich aber ein neues Dateiformat, was nicht für den Editor, sondern für ein anderes Programm ist.

Schreibe ich mit Autoit "1" (Hier noch als Sting oder Int) rein, ist die Datei 1 Byte groß. In Hex steht da drin 0x00000001. Würde ich 1111 schreiben wollen, würde in der Datei das von grade eben 4 mal stehen. Für das Beispiel von oben 8 mal. Viel zu viel um ressourcenspaarend zu sein.
Also möchte ich, dass wenn ich 1 reinschreiben nur 0x1 drinsteht, oder beim Beispiel von oben 0x0F10010F (habs jetzt nicht umgerechnet). Die 1 die ich reinschreibe ist nichtmehr vom Typ String oder Int, sondern Bit. Ein Bit kann nur 0 oder 1 sein und nicht 2 oder a.

Also wäre die Datei mit dem Inhalt 0x0F10010F genau 1 Byte groß.


Ich hoffe jetzt ist es klarer^^
butter123 is offline  
Old 01/22/2012, 00:08   #9
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Nur schade, dass man nichts kleineres als 1Byte speichern kann. Je nach Dateisystem(ich vermute sogar bei jedem) nimmt deine 1Byte Datei sogar mehr als 1Byte Speicherplatz weg. Du versuchst hier an der vollkommen falschen Stelle zu sparen.
MoepMeep is offline  
Thanks
1 User
Old 01/22/2012, 00:16   #10
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
Hmm ok. Und wie kann ich einen Byte speichern? Ich möchte jetzt bspw. die Zahl 16 in einem Byte speichern. Ein Byte kann ja 256 unterschiedliche Werte haben umgerechnet in Dez.
butter123 is offline  
Old 01/22/2012, 00:22   #11
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
FileWrite? Steht in deinem 1. post 16 in hex ist 10.
MoepMeep is offline  
Old 01/22/2012, 00:49   #12
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
ich hatte doch bereits gesagt, das autoit zahlen als dword/int automatisch behandelt. diese sind unter windows exakt 4 byte groß. willst du nur ein byte nutzen, musst du das ganze mit binären befehlen bearbeiten.

bsp:
Code:
$hwnd = FileOpen('text.txt', 18)
FileWrite($hwnd, BinaryMid(1,1,1))
FileClose($hwnd)
schreibt 0x01 als ein byte in die datei.
lolkop is offline  
Thanks
1 User
Old 01/22/2012, 01:04   #13
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
werd ich hjeute mal irgendwann auspribeiren danke
butter123 is offline  
Old 01/22/2012, 01:24   #14
 
elite*gold: 42
Join Date: Jun 2008
Posts: 5,425
Received Thanks: 1,888
Quote:
Originally Posted by lolkop View Post
ich hatte doch bereits gesagt, das autoit zahlen als dword/int automatisch behandelt. diese sind unter windows exakt 4 byte groß. willst du nur ein byte nutzen, musst du das ganze mit binären befehlen bearbeiten.

bsp:
Code:
$hwnd = FileOpen('text.txt', 18)
FileWrite($hwnd, BinaryMid(1,1,1))
FileClose($hwnd)
schreibt 0x01 als ein byte in die datei.
Kann man bei AutoIt nicht direkt 0x01 angeben? Also FileWrite($hwnd,0x01)
MoepMeep is offline  
Old 01/22/2012, 01:49   #15
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
Quote:
Originally Posted by MoepMeep View Post
Kann man bei AutoIt nicht direkt 0x01 angeben? Also FileWrite($hwnd,0x01)
doch schon aber autoits automatische typen analyse macht aus der eingabe 0x1(hex) automatisch 1(dec). und 1(dec) wird binär wieder als dword ausgewertet und somit wird 0x00000001 gespeichert.
lolkop is offline  
Reply


Similar Threads Similar Threads
c++ winapi, etwas in eine Datei schreiben?
11/17/2011 - C/C++ - 2 Replies
Abend, ich bräuchte hilfe mit dem Schreiben von Texten (bzw. andere Sachen) in Dateien. Das habe ich: fstream f; f.open("C:\\test.txt", ios::out); f << "text" << endl; f.close();
Ini datei schreiben
07/16/2011 - AutoIt - 11 Replies
Edit
ini datei schreiben c++
11/04/2010 - C/C++ - 29 Replies
ich will eine ini datei mit c++ erstellen. aber der folgende code will nicht (es wird keine ini datei erstellt) WritePrivateProfileString(L"etwas", L"etwas", L"wieder etwas", L"test.ini"); was is der fehler daran? edit: windows.h hab ich includiert
[VB.NET][TuT] Sequenziell eine Datei lesen und schreiben
02/26/2010 - Coding Tutorials - 0 Replies
Die Projekt Datei ist schon mit Visual Basic 2008 benutzbar. ================================================= === In diesem Tutorial zeige ich euch, wie wir aus einer datei lesen und diese schreiben. =================================== =================================== •Was wir brauchen - Label1 (BackColor = Control, BorderStyle = Fixed3D, AutoSize = False) - Label2 (Text = Nr)



All times are GMT +1. The time now is 08:46.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.