Miten saa tavuista desimaaliluvun ja desimaalista tavun?
Mitä tarkoitat tavu(i)lla?
byte tavut[3] <-- tuollaisia
EDIT: jotain tälläistä löytyi googlettamalla:
f = (bytes[0] << 24) | ((bytes[1] & 0xFF) << 16) | ((bytes[2] & 0xFF) << 8) | (bytes[3] & 0xFF);
No mutta tuossahan on vain kolme tavua.
TsaTsaTsaa kirjoitti:
No mutta tuossahan on vain kolme tavua.
Taulukot alkaa nollasta.
Pilari kirjoitti:
TsaTsaTsaa kirjoitti:
No mutta tuossahan on vain kolme tavua.
Taulukot alkaa nollasta.
Mutta taulukkoa luodessa annetaan alkioiden määrä.
Ops. Olet oikeassa: siinä pitäisi lukea tavut[4].
Muistelin että taulukot menee tällä tavalla:
byte tavut[3]; tavut[0] = 0x00; tavut[1] = 0x00; tavut[2] = 0x00; tavut[3] = 0x00;
Osoittimen typpimuunnoksella.
typedef unsigned char byte; float a; float *ptr; byte *tavut; ptr = &a; tavut = (byte*) ptr; int i; printf("%d tavua:", sizeof(a)); for (i = 0; i < sizeof(a); ++i) { printf(" %#04x", tavut[i]); } printf("\n");
Toki muunnoksen voi kirjoittaa yhdellekin riville, yritin vain selkeyttää asiaa yllä.
tavut = (byte*)&a;
Voit myös kopioida suoraan memcpy-funktiolla:
const int koko = sizeof(luku); char tavut[koko]; memcpy(tavut, &luku, koko);
Toiseen suuntaan vastaavasti vaihtamalla memcpy-funktion parametrien järjestystä tai osoittimen tyyppimuunnoksella:
byte *tavut; float *lukuosoitin; float luku; lukuosoitin = (float*) tavut; luku = *lukuosoitin;
Jos muunnoksia uhkaa tulla paljon, voit harkita union-tietotyypin käyttöä.
union fb { float f; byte tavut[4]; }; fb luku; luku.f = 10.3; for (i = 0; i < 4; ++i) { printf(" %02x", luku.tavut); } printf("\n");
Kiitoksia, nyt toimii.
Kannattaa myös huomioida, että muuttujan lukemisen toisen tyyppisenä voi tehdä C++:ssa kauniisti myös templaateilla, jolloin syntaksista saa yhtä ruman kuin muillakin C++:n tyypinmuunnoksilla ja lisäetuna saat hämmennettyä koodisi lukijoita entisestään:
template<class A,class B> A cast_dammit_cast(const B& b) {return *(A*)&b;} float f=5.5f; int i = cast_dammit_cast<int>(f);
Aihe on jo aika vanha, joten et voi enää vastata siihen.