codevision - problem s pointery
Miroslav Sinko
sinkomiro@rocketmail.com
Středa Červenec 5 01:47:24 CEST 2006
--- GT5 <gt5@seznam.cz> wrote:
> unsigned int adresa16;
> unsigned char *horni8 , *dolni8;
> adresa = 0x01FA; // napriklad
> dolni8 = &adresa;
> hodni8 = &adresa + 1; //nasledujici byte o pozici vedle.
Nie je pre smernikovu aritmetiku v tomto pripade rozhodujuci prvy
operand za '=', teda &adresa? To by +1 znamenalo +2 byty, akoze plus
1*sizeof(unsigned int).
spravne by bolo:
horni8 = (unsigned char*)&adresa + 1;
> nyni by promenne
> // *dolni8 a *horni8 mely obsahovat 0x01 a 0xFA.
> // jenze neobsahuji :(
dolni8 by ale fungovat mal... pripadne explicitne napisat
dolni8 = (unsigned char*)&adresa;
> jiny postup : // opet nefunkcni
> unsigned int adresa16;
> unsigned char horni8 , dolni8;
> adresa = 0x01FA; // napriklad
> dolni8 = (unsigned char)(0x00FF & adresa);
> horni8 = (unsigned char)(adresa >> 8); //defacto vydelime 256
hmm... toto by malo fungovat...
pre dolny by malo stacit aj:
dolni8 = (unsigned char)adresa;
> Prosil bych o radu "jak" udelat funkce, ktere by vracely horni a
> dolni
> byte z (unsigned int).
> Nejhorsi je na tom to ze syntaxe je spravna a treba v DOS TurboC v
> pohode funguje, HitechC pro PIC to taky pobral
3 doplnujuce otazky:
- nepotrebuje ten kompilator pri zapise unsigned int konstant uviest
'u'? teda napr. 0x00FFu alebo 0x01FAu
- je v zmienenom prekladaci int skutocne 16-bitovy? netreba pouzit
short?
- nema prekladac v dodanych headroch preddefinovane makra LOBYTE() a
HIBYTE()? vacsinou to kompilatory maju, potom by ste napisali:
dolni8 = LOBYTE(adresa);
horni8 = HIBYTE(adresa);
skuste napr. tieto makra
#define LOBYTE(w) ((BYTE)(w))
#define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF))
kde BYTE a WORD su unsigned byte, resp. unsigned short
miro
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
Další informace o konferenci Hw-list