qustion voor C-expert

M

mana111

Guest
hi
Ik moet de lage variabele uittreksel byte van een drijver en het opslaan in een char variabele

suggesties
thanx

 
Het hangt byte bestellen in de machine.dat wil zeggen de machine is little endian of big endian.
Hier is een C-code voor little endian

float a; / / float variabele waarvan de lage byte is nodig
char * ptr, b;

ptr = (char *) &a;

b = ptr [0]; / / b bevat de lage byte van een nu.

..Hoop dat dit is wat u wilde.

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

 
booklog schreef:

Het hangt byte bestellen in de machine.
dat wil zeggen de machine is little endian of big endian.

Hier is een C-code voor little endianfloat a; / / float variabele waarvan de lage byte is nodig

char * ptr, b;ptr = (char *) &a;b = ptr [0]; / / b bevat de lage byte van een nu...
Hoop dat dit is wat u wilde.
 
Hier is een manier om het te doen dat is onafhankelijk van 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);
 
Hi Lambtron,
Wat u hebben geplaatst, moeten enkele wijzigingen.
De juiste code is als volgt
char GetLsb (float * f)
(
int a = 5;
return ((char *) f) [(((char *) & a) [0] == 5))?0: (sizeof (float) -1)];
)

 
Sorry dat ik het geprobeerd, maar te veel fouten

Gelieve Ik wil c converteren van een log routine van basic tot en ik weet dat er een log functie, maar ik moet het gedetailleerd als het in de Basic-code

kan iemand deze omzetten voor mij aub
-------------------------------------------------- -------------
'Maak een aantal variabelen voor gebruik met LN en LOG

Dim LOG_VALUE als float
Dim LOG_POWER als float
Dim LOG_TEMP als float
Dim LOG_X als float
Dim LOG_FACTOR als float
Dim LOG_XSQR als float
Dim LOG_N als byte
Dim LOG_TEMP2 als byteLNC:

'We kunnen niet ln (1) dus we moeten terug een nul als het
Als LOG_VALUE.Byte0 = 0 Then LOG_VALUE = 0: Return

'Het verschil tussen LOG_N.BYTE0 en $ 7E zal de
"Bedrag van 2 ^ LOG_N dat willen we tot en met 2 vermenigvuldigen keer ln ()
Als LOG_VALUE.Byte0 <= $ 7E Dan
LOG_N = $ 7E - LOG_VALUE.Byte0
LOG_FACTOR = -0,69314718 * LOG_N
Anders
LOG_N LOG_VALUE.Byte0 = - $ 7E
LOG_FACTOR = 0.69314718 * LOG_N
Endif
LOG_VALUE.Byte0 = $ 7E

'Begin de Taylorreeks expansie
"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
Herhalen
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 =
Tot LOG_N> 12
LOG_VALUE = LOG_VALUE LOG_FACTOR
Terugkeer
-------------------------------------------------- ---------
Thanx a lot

 
Ik denk dat de structuur en de vakbond is het beste

unie
(
float waarde;

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

floatcombo.value = 323947.24742424;

floatcombo.split.value_aX is nu contais 4 bytes van float variabele

 
atmelAVR91
Ik weet niet hoe het te gebruiken in mijn code
Kunt u schrijf mijn Basic-code met behulp van uw methode?
thankx

 
hi

Raadpleeg het volgende boek
Sorry, maar je moet ingelogd zijn om deze bijlage weer te geven

 

Welcome to EDABoard.com

Sponsor

Back
Top