» »

[c] memcpy

[c] memcpy

slovencl ::

A mi lahko prosim nekdo razloži, zakaj zgornja koda ne deluje, spodnja pa?

uint32_t dolzina;
memcpy(&dolzina, &buf[15], 4);
printf("dolzina1 je: %i\n", dolzina); // rezultat je vedno 0

dolzina=buf[18]*256*256*256 + buf[17]*256*256 + buf[16]*256 + buf[15];
printf("dolzina2 je: %i\n", dolzina); // izpise pravo vrednost


LP, K
  • spremenil: slovencl ()

kow ::

Izbrisi AND pred buf[15].

Raje me ignoriraj :)

Zgodovina sprememb…

  • spremenil: kow ()

sas084 ::

Vprašnje je kakšne tipe maš v bufferju. Z memcopy kopiraš 4 bajte, če maš buffer definiran kot
uint32_t buff[]
in maš 0 na buf[15] potem je jasno zakaj je tak rezultat.

slovencl ::

Buf je definiran kot:
unsigned char buf[500];


Ne, buf[15-18] ni 0. dolzina2 da pravo vrednost.
BTW, obratno pa deluje brez problema: memcpy(&buf[15], &dolzina, 4);

LP, K

Tutankhamun ::

uint32_t dolzina;
unsigned char buf[500];

buf[18] = 0x00;
buf[17] = 0x00;
buf[16] = 0x00;
buf[15] = 0x01;

memcpy(&dolzina, &buf[15], 4);
printf("dolzina1 je: %i\n", dolzina);

dolzina=buf[18]*256*256*256 + buf[17]*256*256 + buf[16]*256 + buf[15];
printf("dolzina2 je: %i\n", dolzina);

Izpis:
dolzina1 je: 1
dolzina2 je: 1


Meni dela :D
AMD Phenom QUAD 9950 Black Edition, 8GB

slovencl ::

Hvala, vse je v redu :)

Spet butasta napaka... v memcpy(&dolzina, &buf[15], 4); sem narobe napisal dolzina... imel pa sem drugo spremenljivko s tem istim napačnim imenom, zato mi ni javilo nobene napake :|


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C++] problem z binarnimi datotekami

Oddelek: Programiranje
9944 (809) mallard
»

C strukture, kazalci naloga pomoc

Oddelek: Programiranje
51464 (1359) DavidJ
»

[C/C++] pointerji in reference

Oddelek: Programiranje
112020 (1844) Matako
»

Pointer-ji v C-ju

Oddelek: Programiranje
291776 (1474) rokpok
»

Coding Style

Oddelek: Programiranje
433462 (2654) 64202

Več podobnih tem