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.