Struct in String umwandeln



  • Hallo @all!
    ich bin auf der Suche nach einer Funktion, der ich einen Zeiger auf ein Struct oder eine Klasse übergebe und diese Funktion mir die Daten des Structs/der Klasse in einen String umwandelt. Ich habe soetwas schon mal gesehen, nur weiß ich nicht mehr wo...vielleicht kann mir einer von euch dabei helfen??

    thx



  • Naja, dass ist so einfach allgemein nicht möglich, da jedes Struct (im Normalfall) verschieden ist, müsstest du das dann für das ensprechende Struct jeweils implementieren. Liest du halt einfach die Daten vom Struct aus, wandelst es gegebenenfalls noch in ein String um und gibst es aus oder verwendest es weiter.



  • Genau das möchte ich gerade nicht! irgendwie muss mann doch eine Bytefolge mit Hilfe eines Algorithmus in ASCII-Text umwandeln könne und umgekehrt.
    Wie bereits gesagt, hab ich soetwas schon mal gesehen aber...



  • Hab's gefunden! noch ein bisschen memcopy() dazu, und dann klappts...trotzdem danke!
    sieht wie folgt aus:

    int encode_binary(const unsigned char *in, int n, unsigned char *out)
    {
    int i, j, e, m;
    int cnt[256];
    if( n<=0 ){
    out[0] = 'x';
    out[1] = 0;
    return 1;
    }
    memset(cnt, 0, sizeof(cnt));
    for(i=n-1; i>=0; i--){ cnt[in[i]]++; }
    m = n;
    for(i=1; i<256; i++){
    int sum;
    if( i=='\'' ) continue;
    sum = cnt[i] + cnt[(i+1)&0xff] + cnt[(i+'\'')&0xff];
    if( sum<m ){
    m = sum;
    e = i;
    if( m==0 ) break;
    }
    }
    out[0] = e;
    j = 1;
    for(i=0; i<n; i++){
    int c = (in[i] - e)&0xff;
    if( c==0 ){
    out[j++] = 1;
    out[j++] = 1;
    }else if( c==1 ){
    out[j++] = 1;
    out[j++] = 2;
    }else if( c=='\'' ){
    out[j++] = 1;
    out[j++] = 3;
    }else{
    out[j++] = c;
    }
    }
    out[j] = 0;
    return j;
    }

    int decode_binary(const unsigned char *in, unsigned char *out)
    {
    int i, c, e;
    e = *(in++);
    i = 0;
    while( (c = *(in++))!=0 ){
    if( c==1 ){
    c = *(in++);
    if( c==1 ){
    c = 0;
    }else if( c==2 ){
    c = 1;
    }else if( c==3 ){
    c = '\'';
    }else{
    return -1;
    }
    }
    out[i++] = (c + e)&0xff;
    }
    return i;
    }



  • Ich weiß jetzt nicht, wie Structs intern aufgebaut sind, aber dass kann gleub ich nur funktionieren, wenn die Variblen etc aus dem Struct direkt hintereiander abgelegt sind und du dann guckst, groß das Struct ist. Dann könnte man den Speicherbereich auslesen (wenn das denn zulässig ist) und dann könnte man das theoretisch in ASCII umwandeln.

    EDIT: Najut, zu spät 🙂 Guck ich mir ma an, lernt man wieder mal was :pp



  • /* War Schwachsinn */


Anmelden zum Antworten