Nej der er ikke nogen korrekt måde eller lovlig måde. Du kan lave en konvertering med sscanf. Hvis du smider noget kode hvor det skal indgå så kan jeg måske komme med en anden ide.
char buffer[1024]; char* off=buffer; fill_buffer_with_123_bytes_of_important_data( &off ); strcpy( off, "efterfølgende skal der stå en streng" ); off += strlen("efterfølgende skal der stå en streng")+1; float minværdi = 123.0123; memcpy( off, &minværdi, sizeof(float) ); long dataLength = buffer - off;
Det er sidste linie som jeg gerne vil vide hvordan jeg udfører bedst muligt
Ja, den pointer arithmatic der står i sidte linie er isoleret set rigtigt.
fill_buffer_with_123_bytes_of_important_data( &off ); // har formodentlig en sideeffekt på off svarende til 0ff += 123; checkes evt. ved at lave en beregning af dataLength lige efter kaldet.
float minværdi = 123.0123; memcpy( off, &minværdi, sizeof(float) ); // kopier den binære værdi ind efter nul termineret streng. off += sizeof(float); // mangler?
long dataLength = buffer - off; // nu burde den give den værdi jeg ville forvente nemlig 123+strlen("efterfølgende skal der stå en streng" ) + 1 + sizeof(float)
Et af mine issues er at jeg for en warning når jeg caster til en long... kan det være fordi at en char* kan have forskellige størrelse på forskellige platforme ?
Ja char kan have forskellig størrelse men jeg har aldrig set det :) og standarden siger
"Subtraction of pointers is defined only when both pointers point at elements of the same array (although the language has no way of ensuring that is the case).When subtracting one pointer from another, the result is the number of array elements between the two pointers (an integer)"
Så man får ikke et antal bytes men et antal elementer som her formodentlig er bytes, hvilket ikke nødvendigvis ville være tilfældet med pointerer til andre strukture.
At du får en warning kan være så meget måske warner den om at den konverterer dit array til en poiner før subtraktion. Hvilken warning giver den?
jeg tror nok jeg endte med at gøre således det løser mit problem med den warning
char* off; char* a; long i=long(off -a);
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.