16 hex de biţi pentru a conversin zecimal în C

D

dayal

Guest
Salut,
Pentru a toată lumea,
Am dori să woul conversia datelor în valoare de 16 bit zecimal folosind un cod C (I sînt nu folosire Adunarea), pentru proiectul meu, asa ca a putea anyone spune-mi cum o pot face, în aşteptarea replică,

mulţumesc
dayal

 
cel mai rapid mod ar fi de a utiliza scădere.16bit număr nu este mai mare de 65k (nesemnate) sau 32k (semnat).ele nu sunt mai mari decât 100k tkan [;

tot ce trebuie să faceţi este o bucla în care faceţi următoarele:

1.tu sutract var1 (la început ar trebui să fie 10000) de la HEX dvs.
2.să adăugaţi var1 să DEC_1 dvs. (la început, este utilizată pentru a arăta 10000 lui, mult de 1000 şi aşa mai departe până la 1's).
3.în cazul în care HEX <var1 => var1 = VAR1/10 (mai bine utilizaţi un tabel de căutare, deoarece nu are nevoie de diviziune) (acest lucru în a doua etapă va fi 1000, peste 100, mult de 10 şi, în final 1 [<= ai nevoie de un alt test pentru această condiţie, pentru a termina bucla sau o altă şmecherie de programare]) _and_ modifica valoarea zecimală la cea următoare (DEC_2, decât DEC_3 ...) _else_ continua bucla de la început

)

o poti face într-un mod mai jos (care nu este un cod complet, probabil!)Cod:char dec [5] = (0,0,0,0,0);

divisior int [] = (10000,1000,100,10,1);

hex int = 54321;for (int i = 0; i <5; i )

(

în timp ce (hex> = divizorul )

(

hex = hex-divizorul ;

dec ;

)

)

 
Salut,
in this regard?

Ce vrei sa spui cu zecimale,
în acest sens?Reprezentare zecimal şir ASCII sau BCD (binar codificat zecimal) de date.Primul este acchieved prin sprintf () biblioteca funcţie, pentru acesta din urmă de multe compilatoare C au funcţii suplimentare.
Dacă nu, puteţi face după cum a sugerat, sau pentru codul oarecum compacter, utiliza Modulo C "%" operator.

Cu respect,
Frank

 
dar trebuie să ştiţi că:

1.sprintf va folosi ca 2k de cod dumneavoastră, şi am bucla postat de mai sus ~ 100 bytes Poate
2.Modulo arata bine, dar daca chip-ul dumneavoastră nu suportă diviziune în hardware-ul va fi nevoie de mult mai mult timp acest fel, şi, probabil, să ia codul de mai mult în urma

0x41 0x56 0x45!

 
Asta e tot adevărat.Dar am să presupunem că aritmetica sprintf () şi pentru a fi utilizate oricum într-un design nontrivial.De fapt, aceasta depinde de design.Când se utilizează C, unul ar trebui să înveţe pe care le ofera mai mult de patru operaţiuni fundamentale.

 
nesemnat rezultat char [6];

void bin2ascii (date unsigned int)
(
uc unsigned char;
pentru (uc = 0; UC <4; UC )
(
rezultat [uc] = ''; / / set primele patru caractere pentru a spaţiului
)
rezultat [uc] = '0 '; / / set char a cincea pentru ASCII 0
rezultat [5] = 0; / / termina şirul de caractere
în timp ce (date> 10)
(
rezultat [uc] = (unsigned char) (datele de 10%) '0 ';
UC -;
de date de date = / 10;
)
în cazul în care (date! = 0)
(
rezultat [uc] = date '0 ';
)
return;
)

 
Max dayal, Vă rugăm să descrieţi ce tipuri de variabile care să conţină datele dvs. şi valorile de ieşire.Un exemplu de conversie ar ajuta, de asemenea, clarificarea întrebarea dumneavoastră.

Linia dvs. de subiect menţionează hex.Dacă doriţi să conversia unui Null-încetat şir ASCII, cum ar fi "C31B" într-un int nesemnate care conţin 49947, apoi sscanf () ar putea face asta, dar este o funcţie de mare bibliotecă.Un scrise de mână hex-string-la-unsigned-int funcţia ar fi mici şi simplu, în cazul în care este de conversie care aveţi nevoie.

 

Welcome to EDABoard.com

Sponsor

Back
Top