Der big endian und der little endian..

…machen mir Probleme.

Eigentlich muss man sich nicht darum kümmern, wie ein Prozessor Zahlen intern betrachtet. In einer Hochsprache wie C schon gar nicht, oder?

Na ja, eine Herausforderung ist es schon, wenn man Meta- Daten auf Bit Ebene – in meinem Fall geht es um Bild Dateien – auf einem modernen Mac verarbeiten möchte, wenn die von einem Atari ST stammen, der hat einen 68000er und der speichert integer nun mal anders.

x86 Architekturen gehen da so vor:
Bildschirmfoto 2013-11-26 um 18.43.01
Little Endian
Der 68000 tut das so:
Bildschirmfoto 2013-11-26 um 18.44.56
Big Endian

Wenn man nun wie in meinem Fall aus dem header eines im NeoCrome Format gespeicherten Bildes einen Wert der Farbpalette liest und das in einen Integer auf einer x86 Platform speichert, dann erhält mann die Bit- Folgen die die Helligkeitswerte für die R, G und B Anteile – jew. repräsentiert durch 4 Bits – vertauscht 😦

Links (<<) – und Rechts (>>) Shift:
Aufgepasst! Links schieben heist vom LSB in Richtung MSB. Auf dem x86 wandern die Bits dann aber nach rechts.

 

 

Advertisements

Class calls it’s own (instance) method…..

…“self“ macht es möglich. Ob es sich dabei um einen guten Programmierstil handelt, mögen andere entscheiden. Interessieren würde es mich schon.

Ich sollte vielleicht erwähnen, dass ich eher ergebnisorientiert arbeite, das mag sich denn auch an der Tiefe äussern, mit der ich meine jew. Lösung erläutere.

Die Folgende Fragestellung ergab sich:
Eine eigene Controller Klasse wurde erzeugt (wie, das kann man da nachlesen). Von C bin ich es gewohnt, dass ich mir aus main() heraus div. Unterprogramme aufrufe. Denen kann man auch gerne mehrere Werte übergeben. Man erhält maximal ein Ergebnis zurück: return (ergebnis)

Wie funktioniert das nun in der Implementation meiner Controller Klasse? Das man aus der Klasse heraus prima auf eine in C geschriebene Bibliothek an Funktionen zugreifen kann, habe ich hier gezeigt.

Möchte ich also aus meiner Controller Klasse auf eine deren Methoden zugreifen, kann ich das so machen:
Bildschirmfoto 2013-11-21 um 21.19.20

convert_it schaut so aus (der Anfang, mindestens):Bildschirmfoto 2013-11-21 um 21.20.19

Damit habe ich dann etwas, was einem Unterprogramm sehr nahe kommt und fast genauso komfortabel ist. self: Guten Stil für diesen Zweck? Entscheidet selbst

String Objekte in Strings wandeln..

…Objective C und natives C arbeiten harmonisch, Seite an Seite. 

Da frage ich mich, wie kann man die Schnittstellen gestalten. Nehmen wir an, wir bauen uns ein Cocoa Projekt unter XCode. Dort erzeugen wir uns gewöhnlich ein Controller Objekt. Dieses Objekt repräsentiert z.B. ein Dialog Feld. Die Textfelder sind die Eigenschaften unseres Dialog Objektes. Die Buttons dessen Methoden.

Pures Objective C regelt den Dialog. Die Funktionen welche – je nach Dialog mit dem Nutzer – zur Ausführung gewünscht werden, sind in nativem C geschrieben.

Wie übergebe ich nun z.B. der Funktion „test ()“ einen String der in einem NSTextField Objekt steht?

Antwort: Wir wandeln das den String aus dem NSTextField – der ja eigentlich ein Objekt ist – in einen String, der auch einer ist – kein Objekt!

Das geht z.B. so:

Bildschirmfoto 2013-11-10 um 20.25.11

 

Die Funktion bekommt einen „echten“ String übergeben: grafik15(char meinstring[length]) {….}

That’s it!