001
14.11.2017, 15:53 Uhr
ao
(Operator)
|
Ob und wie man C#-Code in mex-Files einbinden kann, weiß ich nicht.
In C kann man sowas mit unions machen, in C++ gibts dafür std::bitset (oder ebenfalls union).
Unions (auch Varianten genannt) sind von der Syntax her genauso wie structs. Der Unterschied ist, dass in der struct die Member hintereinander im Speicher liegen und in der Union alle auf derselben Stelle. Mit einer Union kann man also ein Stück Speicher als unsigned-char-Array befüllen und anschließend als double auslesen.
Das ist natürlich hochgradig unportabel wie alles, was direkt mit der Zahlendarstellung der CPU und des Compilers spielt, aber solange man es nicht in zu vielen verschiedenen Umgebungen verwenden will, ist es ziemlich straight forward.
Hier ist ein einfaches Beispiel, lauffähig auf Ubuntu 16.04 (x86_64, gcc 5.4). Wie man daraus eine mex-Funktion macht, weißt du wahrscheinlich besser als ich.
C++: |
#include <stdio.h> #include <string.h>
/* define union type */ union Converter { /* a double and an array of unsigned char, * overlapping in memory */ double d; unsigned char bytes[8]; };
int main (void) { /* declare variable of union type */ union Converter c; /* create input data */ unsigned char input [] = { 0, 0, 0, 0, 0, 0, 0, 64 };
/* fill input data into char-array portion of union variable */ memcpy (c.bytes, input, 8); /* read and print double portion of union variable */ printf ("%lf\n", c.d); /* result is 2.000000 */ return 0; }
|
|