Napisano: 17 Jun 2011 19:57
Jel mozes da mi pokazes definiciju strukture "battery_reply", da vidim kojih su tipova clanovi?
Kad napises nesto ovako (recimo):
double nekiBr = 5.48;
short nekiDrugiBr = nekiBr;
Kompajler ti salje upozorenje da dolazi do krnjenja i implicitno cast-uje vrednost (u odgovarajuci tip sa leve strane) i dodeljuje "primaocu".
Dok ovako:
double nekiBr = 5.48;
short nekiDrugiBr = (short)nekiBr;
Explicitno cast-ujes u odgovarajuci tip, s'tim da kompajler kod ovakvog cast-a zna da si svestan mogucih gresaka (od krnjenja) pa ne izbacuje upozorenje.
Tip promenjljive sa leve strane ostaje uvek isti, nemoguce ga je promenuti, hteo ili nehteo/slucajno Menja se samo vrednost koju "drzi".
Dopuna: 17 Jun 2011 20:51
Neznam ni sam kako ces da izvedes ono sto si hteo bez imalo predznanja iz C-a, al' 'ajde.
E, ovako, clanice strukture "battery_info_reply":
...
u32 batt_vol;
u32 level;
...
nagovestavaju sa su unsigned celi (samo pozitivni) brojevi, long (32 bita). Znaci isto kao kad bi napisao:
...
unsigned long batt_vol;
unsigned long level;
...
verovatno je negde definicija u ostalim hederima, nesto kao:
typedef unsigned long u32;//postedjuje kucanja
Ona funkcija za odredjivanje procenta baterije otpada jer ovu strukturu treba da koristis samo za "citanje" vrednosti (read-only) pa stim bi trebao da je napravis drugacije. Osim ako ne planiras da izmenis onu biblioteku?
Nesto kao:
typedef unsigned char u8;//tip dovoljan da drzi vrednosti od 0 - 255
// ako si siguran 100% da su ovo nominalne vrednosti
const double minv = 3420.0;
const double maxv = 4200.0;
const double vrange = maxv - minv;
static u8 get_batt_level( struct battery_reply *buffer )
{
double vtt;
vtt = (double)buffer->batt_vol;
if (vtt < minv) return 0;
else if (vtt > maxv) return 100;
return (u8)(((vtt - minv) / vrange) * 100);
}
...
// e sad ovde negde primas podatke "battery_info_reply" od neke funkcije koju si pozvao, recimo:
struct battery_info_reply battinfo;
htc_battery_level_compute( &battinfo);//ovo moras ti da vidis koju pozivas
...
u8 procenat = get_batt_level(&battinfo);
...//ovde koristis taj rezlutat/procenat, sta si vec mislio
|