Binäre Datenverarbeitung mit SWIFT 5

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Binäre Datenverarbeitung mit SWIFT 5

    Hallo zusammen,

    ich möchte mit SWIFT 5 unter Big Sur binäre Daten verarbeiten. Ich möchte also eine Datei binär laden, verarbeiten (XOR, AND, OR...) und wieder ausgeben.
    Die binären Strings können dabei unterschiedlich groß sein. Von ein paar Byte bis mehrere Mega Byte. Es kann also sowas sein:

    0b01010101111111000011

    oder auch deutlich länger. Mein Problem ist nun, dass SWIFT typischer ist und immer irgendwas formatieren will. Beispiel:

    let bitMaske = String(00011111000011, radix: 2)

    geht ja noch. Wenn ich den String dann in eine Datei ausgeben will, z. B. so:

    try bitMaske.write("/Volumes/MAC Daten/arbeit/test.bin", atomically: false, encoding: bin_daten)

    kommen jeden Menge Fehlermeldungen. Egal was ich hier angebe. Eigentlich ist "encoding" in diesen Fall überflüssig weil nichts
    am Sting geändert werden soll.

    Nun meine Frage. Wie macht man rein binäre Datenverarbeitung in SWIFT? Ich habe mehrere Bücher die sich darüber ausschweigen.
    Geht das überhaupt oder sollte ich mir gleich eine andere Programmiersprache wählen? Wie sieht es in dem Zusammenhang mit C++ aus. Hat das
    unter MacOS noch Zukunft?

    Gruß und Dank

    Frank
  • Du kannst die Daten in ein NSData-Objekt lesen und nach Belieben mit boolschen Operatoren agieren ... das hat mit Swift primär nichts zu tun (sondern mit den verfügbaren Objektklassen). NSStrings oder Strings sind für binären Inhalt eher suboptimal :)

    Mattes

    P.S.: Dass Swift "typischer" ist, hat also mit Deinem Problem nix zu tun, Typ-Sicherheit übrigens auch nicht ... SCNR :)
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Danke für die Antwort. NSData gibt es offenbar auch in Objektiv-C. Ich habe es daher nicht beachtet. Gibt es irgendwo eine Seite, wo NSData
    verständlich erklärt wird? Wie müsste die Programmzeile aussehen, wenn damit "bitMakse" in eine Datei geschrieben werden soll?
  • fbfm schrieb:

    NSData gibt es offenbar auch in Objektiv-C.
    NSData ist eine Klasse des Apple Foundation-Frameworks und hat mit der verwendeten Programmiersprache nichts zu tun! Mit diesen Frameworks musst Du Dich vertraut machen, wenn Du für Apple-OS entwickelst ... auch wenn Du mit Swift programmierst. Die wenigsten Fragen hier sind wirklich Swift-Fragen, weil gerade Anfängern scheinbar schwer fällt, den Unterschied zwischen einer Programmiersprache und benutzten Bibliotheken / Frameworks zu verstehen.

    fbfm schrieb:

    Gibt es irgendwo eine Seite, wo NSData
    verständlich erklärt wird? Wie müsste die Programmzeile aussehen, wenn damit "bitMakse" in eine Datei geschrieben werden soll?
    Hast Du die von mir verlinkte Doku gelesen, zum Beispiel diese Methode?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Aha. Ich habe in den beiden Büchern nachgesehen. In einem kommt NSData überhaupt nicht vor und im anderen wird das nur mal an Rande erwähnt.
    Verstehe ich das jetzt richtig. Das Foundation-Framework wird vom Betriebssystem bereit gestellt und kann dann über verschiedene Programmiersprachen
    angesprochen werden. Idealerweise hat man nicht nur ein Buch was die Programmiersprache beschreibt sondern auch eins, in dem das Foundation-Framework
    beschrieben wird.

    Verstehe ich das richtig? Wenn ich in die main.swift "import Foundation" schreibe, ist das Foundation-Framework eingebunden? Oder doch "Import UIKit"?
  • Nicht das Betriebssystem stellt Dir diese Frameworks bereit, sondern sie sind Bestandteil des SDKs ("Software Development Kits"), das Du bei der Entwicklung von macOS / iOS Apps nutzt. Hierbei nutzt Du UIKit für Objekte der Benutzeroberfläche für iOS (bei macOS wäre es AppKit), während das Foundation-Framework grundlegende Objektklassen bereitstellt ... wie z. B. NSData. Es ist Dir vermutlich noch nicht explizit begegnet, weil Du UIKit importierst und dies automatisch Foundation mit einbindet. Würdest Du z. B. ein Kommandozeilen-Tool entwickeln, könnte Foundation reichen.

    Deine Aussage bzgl. Bücher / Lernmaterial würde ich weiter zuspitzen: Eine Programmiersprache wie Swift oder Objective-C ist vergleichsweise leicht zu lernen: Operatoren, Elemente der Programmlogik wie Abfragen und Schleifen, Definitionen von Variablen, Konstanten, Funktionen etc. ... das ist recht überschaubar. Was Dich viel länger beschäftigen wird: Welches Framework, welche Klasse und welche Methoden sind für bestimmte Aufgaben zu verwenden und wie "ticken" diese...?

    Bücher, die ich bzgl. macOS oder iOS App-Entwicklung gesehen habe, kombinieren beide Aspekte.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • func write(to url: URL, options: Data.WritingOptions = []) throwsIch dachte an Beispiele bei denen auch klar wird, wie man denn der "func" mitteilen kann, welche Daten überhaupt geschrieben werden sollen. Und aus Data.WritingOptions werde ich auch nicht schlau. Ich will ja sozusagen Low Level Datenverarbeitung machen.Es dürfen daher durch Data/Swift keinerlei Vormantiereungsversuche/Interpretationen gemacht werden. Ich will sozusagen im Roh-Datenformat schreibenund natürlich auch lesen.
  • Das ist eine Methode der Data-Objektklasse, Du nutzt sie also mit Deiner Data-Instanz ... damit ist klar, was geschrieben wird. Und nein, der Inhalt wird nicht "interpretiert", sondern 1:1 geschrieben.

    Beispiele solltest Du mit Google genug finden können, wenngleich die verlinkte Doku reichen sollte ... auch die writingOptions sind in ihr verknüpft. Lesen musst Du schon selber.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.