CPP - void zu byte-array konventieren

  • C++

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von LuaX.

    CPP - void zu byte-array konventieren

    Hallo!
    Ich habe mal wieder ne Frage die genauso einfach ist wie Pi komplett zu berechnen.

    Ist es möglich eine void zu einem byte array zu konventieren und zurück? Und dann auch ohne weitere Bibliotheken und möglichst wenig Speicher zu verwenden, so 2 kb?

    Grüße, Luca
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Danke '@Bluespide'
    Wäre char* nicht ein Pointer?
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Ich bin mir da nicht sicher wie das mit Arrays variabler größe ist.
    Was ich machen möchte? Ich möchte das Array mittels einer Bibliothek abspeichern und später wieder in die void reinladen
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Achso ja dann Speicher reservieren und kopieren:

    C-Quellcode

    1. char* bytePtr = (char*)malloc(sizeOfTheVoidArray);
    2. memcpy(bytePtr, voidPtr, sizeOfTheVoidArray);
    Genau so dann auch wieder zurück, aber nicht vergessen den Speicher auch wieder mit free freizugeben.
    Danke Bluespide
    Jetzt habe ich auch mal einen Grundkurs in memcpysierung gehabt :)
    Jetzt aber noch einmal blöd gefragt

    "sizeOfTheVoidArray" ist was?
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    malloc ist C nicht Cpp

    also-> new und delete verwenden, evtl. sogar noch smartptr

    sizeOfTheVoidArray ist natürlich die größe der Daten in Bytes.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Danke euch....etwa so?
    [c]
    #include <iostream>
    using namespace std;
    void test(){
    cout << "Test wurde aufgerufen";
    }

    int main()
    {
    cout << "Die Methode test() wird konventiert" << endl;
    char* bytePtr = static_cast<char*>(&test);
    return 0;
    }
    [\c]

    Weil dat geht net....
    Ich bin zugegeben nicht der beste in Cpp aber ich komm halt nicht drum rum...
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Auch wenn ich seit einiger Zeit nicht mehr in C++ etc. programmiert habe: Du willst ne FUNKTION in nen ByteArray konvertieren? Bei den bisherigen Antworten wurde m.E. davon ausgegangen, dass Du ne VARIABLE vom Typ void in ein ByteArray und zurückkonvertieren willst. Ich kenn zwar den aktuellen C-Syntax nicht, aber für ne Funktionsadresse benutzt man in VB AddressOf bzw Delegaten. Such doch mal nach dem Stichwort Funktionspointer.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Da tut es mir leid das ich das falsch formuliert habe...
    Ich möchte eine Funktion in eine Datei einbuchten und an einem anderen Gerät wieder ausladen. Compilieren kann man an Gerät 2 vergessen weil das schlichtweg nicht geht...
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Ne. char* c = reinterpret_cast<char*>(x); bzw. andersherum void* x = static_cast<void*>(c);. Generell sollte man aber kein void* benutzen. Erkläre mal bitte genauer. Für gewöhnlich reicht ja n vector<> und die Weitergabe erfolgt als Referenz.
    du kannst nicht einfach eine compilierte Funktion in einer Datei abspeichern, da gibt es viel zu viele Sachen die eine Rolle spielen, der String z.B. ist nicht direkt Teil der Funktion selbst.
    Vlt. erklärst du uns genau, warum es nicht funktionieren soll auf dem anderen Gerät zu Kompilieren, oder warum du überhaupt eine Funktion abspeichern möchtest, sie ist doch bereits Teil der Anwendung, wozu nochmal extra abspeichern?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also.... Ich habe 2 Geräte, einer davon ist ein Computer. Auf dem Computer läuft ein Programm das eine CPP void kompiliert und dann als Datei ausgeben...mein 2. Gerät soll die Datei dann einlesen und wieder in eine void reinpacken.
    EDIT:Kompilieren ist nicht möglich da 1. nicht genug ram 2. da kein Computer

    Oder gäbe es alternativen?
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Ich hab sowas schon mal gesehen, wo jemand an einen in c geschriebenen Server entwickelt hat, ohne diesen die ganze Zeit neu zu starten. Aber ich glaube das ist schon sehr schwer und du musst dann genau wissen was du machst. Wenn du nach c++ hot reload oder c++ hot swapping suchst findest du dazu was.
    Also noch einmal zum Verständnis: Du magst Quellcode (C) in Assembler kompiliert und dann auf ein zweites Gerät schicken um dort den Code auszuführen?

    Ich weis nicht wieviel Verständnis du über das Low Level Programmieren mitbringst, aber wenn du Code kompilierst wird dieser in Assembler umgewandelt
    und der Kompilierer bringt dabei den Code "durcheinander". Ein Programm hat immer ein Daten Segment und ein Code Segment. Im Daten Segment werden Daten wie z.B. String gespeichert oder eben andere Variablen
    und im Code Segment der Assembler Code. Wenn du jetzt nur den Assembler Code an dein zweites Gerät schickst, kann der dort nichts machen, da er die Variablen nicht mehr hat.

    Die einzige Möglichkeit das umzusetzen wäre shellcode zu benutzen. Der Begriff kommt aus der Exploit Szene und beschreibt ein Assembler Programm welches Positionsunabhängig ausgeführt werden kann.
    So ein shellcode missbraucht zum Beispiel als Variablenspeicher den Stack was zu einem Performanceverlustführt und ist außerdem, wie das Wort Missbrauch schon vermuten lässt, nicht wirklich so gewollt.


    Ich denke am Besten wäre es wenn du uns deine gesamte Idee präsentierst, ich geh davon aus, dass man dann eine einfachere Lösung findet...

    ​Edit: Ich hab gerade gesehen, dass es JIT Compiler für C Code gibt guckt dir die doch mal an. Eventuell ist es ja das was du suchst.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    dafür sind libraries wohl gedacht. Aber abgesehen davon was ist denn "kein PC"? x86/x64/ARM/PowerPC? denn die sind nicht einfach so miteinander Kompatibel. Bei Nativen Sprachen musst du entweder auf dem Ziel System compilen, oder einen Cross-Compiler verwenden. Die meisten Geräte sind außerdem in der Lage für sich selbst zu kompilieren, geht nur jenachdem halt eben etwas länger.

    Falls dies nicht möglich ist, brauchst du eher etwas wie eine Skriptsprache, die innerhalb von Cpp dann angesprochen wird, Lua wird hierfür gerne verwendet.
    Ansonsten kann man jenach System auch einfach eine JIT/Skriptsprache direkt verwenden wie z.B. C# oder JS oder whatever.

    Und wenn dir ganz langweilig ist kannst du auch selbst was schreiben^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Und wenn dir ganz langweilig ist kannst du auch selbst was schreiben^^

    Falls du dichs traust :P hier ist, finde ich nen guter Blogpost über das Thema (JIT Compiler für Brainfuck): eli.thegreenplace.net/2017/adv…on-part-1-an-interpreter/

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ok. wie ich sehe kann ich das vergessen...
    Also ich möchte an einem Computer Code generieren und diesen dann "kompilieren" und an mein Gerät Schicken....mein Gerät ist ein in C++ programmierbares Entwicklungsboard..das soll diesen Code ausführen....aufgrund der Tatsache das dieses Board mit C++ "arbeitet"....aber ich werde mal schauen ob ich da vlt. einen Interpreter wie Lua o.Ä. draufbekomme

    Ideen willkommen
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.