qustion for C-ekspert

M

mana111

Guest
hei
Jeg trenger å pakke den lave byte av en float variabel og lagre den i en røye variabel

noen forslag
thanx

 
Det avhenger byte bestilling i maskinen.dvs. at maskinen er liten endian eller big endian.
Her er en C-kode for little endian

float a; / float variabelen som har lav byte er nødvendig
char * ptr, b;

ptr = (char *) &a;

b = ptr [0]; / b inneholder lave byte av nå.

..Håper dette er det u ville.

 
# define LOBYTE (a) (* ((unsigned char *) & (a)))
# define HIBYTE (a) (* ((unsigned char *) & (a) 1))

 
booklog skrev:

Det avhenger byte bestilling i maskinen.
dvs. at maskinen er liten endian eller big endian.

Her er en C-kode for little endianfloat a; / float variabelen som har lav byte er nødvendig

char * ptr, b;ptr = (char *) &a;b = ptr [0]; / b inneholder lave byte av nå...
Håper dette er det u ville.
 
Her er en måte å gjøre det som er uavhengige av endianness:

Code:

char GetLsb (float * f)

(

int a = 1;

return ((char *) f) [(sizeof (float) -1 )*!(*( char *) & a)];

)float f = 123.456;

char c = GetLsb (& F);
 
Hei Lambtron,
Whatever u ha lagt ut, trenger litt modifisering.
Den riktige koden er like nedenfor
char GetLsb (float * f)
(
int a = 5;
return ((char *) f) [(((char *) & a) [0] == 5))?0: (sizeof (float) -1)];
)

 
beklager jeg forsøkt det, men for mange feil

behage jeg vil konvertere en logg rutine fra grunnleggende til c og jeg vet at det er en logg funksjon, men jeg trenger det detaljert som det i grunnleggende koden

kan noen konvertere dette for meg behage
-------------------------------------------------- -------------
Opprett noen variabler for bruk med LN og LOG

Dim LOG_VALUE som Float
Dim LOG_POWER som Float
Dim LOG_TEMP som Float
Dim LOG_X som Float
Dim LOG_FACTOR som Float
Dim LOG_XSQR som Float
Dim LOG_N som Byte
Dim LOG_TEMP2 som ByteLNC:

Vi kan ikke ha ln (1) så vi må returnere null hvis det er
Hvis LOG_VALUE.Byte0 = 0 Then LOG_VALUE = 0: Return

«Forskjellen mellom LOG_N.BYTE0 og $ 7E vil være
'Mengden 2 ^ LOG_N er at vi ønsker å mangedoble ganger ln (2)
Hvis LOG_VALUE.Byte0 <= $ 7E Så
LOG_N = $ 7E - LOG_VALUE.Byte0
LOG_FACTOR = -0,69314718 * LOG_N
Ellers
LOG_N = LOG_VALUE.Byte0 - $ 7E
LOG_FACTOR = 0.69314718 * LOG_N
Endif
LOG_VALUE.Byte0 = $ 7E

'Begynn taylor serien ekspansjon
'Ln (1 LOG_X) = LOG_X - (LOG_X ^ 2 / 2) (LOG_X ^ 3 / 3) - ...

LOG_VALUE = LOG_VALUE - 1
LOG_X = LOG_VALUE
LOG_XSQR = LOG_VALUE
LOG_N = 2
Gjenta
LOG_XSQR = LOG_XSQR * LOG_X
LOG_VALUE = LOG_VALUE - (LOG_XSQR / LOG_N)
LOG_XSQR = LOG_XSQR * LOG_X
LOG_TEMP2 = (LOG_N 1)
LOG_VALUE = LOG_VALUE (LOG_XSQR / LOG_TEMP2)
LOG_N = LOG_N 2
Inntil LOG_N> 12
LOG_VALUE = LOG_VALUE LOG_FACTOR
Tilbake
-------------------------------------------------- ---------
enn en meget

 
Jeg tror struktur og unionen er best

union
(
flyttallsverdi;

struct
(
unsigned char value_a0;
unsigned char value_a1;
unsigned char value_a2;
unsigned char value_a3;
)
dele
)
floatcombo;

floatcombo.value = 323947.24742424;

floatcombo.split.value_aX er nå contais 4 byte av float variabel

 
atmelAVR91
jeg dont vite hvordan man bruker det i koden min
kunne du behage skrive mine grunnleggende koden ved hjelp av metoden?
thankx

 
hei

konsultere følgende bok
Beklager, men du må logge inn for å vise dette vedlegget

 

Welcome to EDABoard.com

Sponsor

Back
Top