Avatar billede krismort Nybegynder
28. november 2007 - 11:20 Der er 7 kommentarer og
1 løsning

korrekt måde at typecaste char* til long

hvad er den korrekte måde at typecaste en char* til en long på ?
-Kristian
Avatar billede segmose Nybegynder
28. november 2007 - 14:20 #1
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.
Avatar billede arne_v Ekspert
28. november 2007 - 15:31 #2
jeg ville nok bruge strtol fordi det giver bedst check for om der er en lovlig vaerdi
Avatar billede krismort Nybegynder
05. december 2007 - 14:38 #3
segmose: her er et eksempel

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
Avatar billede arne_v Ekspert
06. december 2007 - 04:26 #4
Virker den ikke uden videre ?

Subtraktion af to char pointere giver antal chars mellem dem.
Avatar billede segmose Nybegynder
06. december 2007 - 09:22 #5
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)
Avatar billede krismort Nybegynder
06. december 2007 - 11:53 #6
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 ?
Avatar billede segmose Nybegynder
06. december 2007 - 14:42 #7
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?
Avatar billede krismort Nybegynder
10. december 2007 - 13:49 #8
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);
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester