16 bits pour Hex Conversin décimal en C

D

Dayal

Guest
Salut,
A tous,
I woul à convertir les données de 16 bits en valeur décimale en utilisant un code C (je n'utilise pas de l'Assemblée) pour mon projet, si quelqu'un peut me dire comment je peux le faire, en attente de réponse,

merci
Dayal

 
manière la plus rapide serait d'utiliser la soustraction.16bit nombre n'est pas supérieure à 65k (non signé) ou 32K (signé).ils ne sont pas supérieures 100k tkan [;

Tout ce que vous avez à faire est une boucle dans laquelle vous procédez comme suit:

1.vous sutract la VAR1 (au début il ya lieu de 10000) à partir de votre HEX
2.VAR1 vous ajoutez à votre DEC_1 (au début, il est utilisé pour montrer 10.000's, de 1000 et ainsi de suite jusqu'à 1's).
3.si HEX <VAR1 => var1 = VAR1/10 (meilleure utilisation une table de recherche, car elle ne nécessite pas de division) (ainsi dans la deuxième étape ce sera 1000, à 100, de 10 et finalement 1 [<= vous avez besoin un autre test pour cette condition, pour mettre fin à la boucle ou un truc de programmation]) _and_ changer la valeur décimale pour la suivante (DEC_2 que DEC_3 ...) _else_ continuer la boucle depuis le début

)

vous pouvez le faire d'une façon suivante (ce n'est pas un code complet sans doute!)Code:char dec [5] = (0,0,0,0,0);

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

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

(

while (hex> = diviseur )

(

hex = hex-diviseur ;

dec ;

)

)

 
Bonjour,
in this regard?

Qu'entendez-vous avec décimales
à cet égard?ASCII décimal représentation de chaîne ou BCD (binaire codé décimal) de données.La première est acchieved par sprintf () fonction de la bibliothèque, pour les statisticiens de ce dernier beaucoup ont des fonctions additionnelles, C.
Sinon, vous pouvez faire comme l'a suggéré, ou pour le code un peu plus compacte, d'utiliser C modulo "%" opérateur.

Observe,
Frank

 
mais sachez que:

1.sprintf utilisera comme 2k de votre code, et la boucle i ~ posté ci-dessus peut-être 100 octets
2.modulo semble bon, mais si votre puce ne supporte pas la division dans le matériel, il faudra beaucoup plus de cette façon, et sans doute prendre plus de code dans le résultat

0x41 0x56 0x45!

 
That's all true.Mais je suppose que l'arithmétique sprintf () et pour être utilisés quand même dans une conception non triviale.En fait, cela dépend de la conception.Lorsque vous utilisez C, on doit apprendre qu'il offre plus que les quatre opérations fondamentales.

 
unsigned char résultat [6];

void bin2ascii (données unsigned int)
(
unsigned char uc;
for (UC = 0; uc <4; uc )
(
result [UC] = ''; / / on définit quatre premiers caractères de l'espace
)
result [UC] = '0 '; / / set char cinquième ASCII 0
result [5] = 0; / / terminer la chaîne
while (data> 10)
(
result [UC] = (unsigned char) (données de 10%) '0 ';
uc -;
data = data / 10;
)
if (data! = 0)
(
result [UC] = data '0 ';
)
return;
)

 
Dayal Salut, S'il vous plaît décrire quels types de variables contiennent vos valeurs d'entrée et de sortie.Un exemple de conversion permettrait également de préciser votre question.

Votre ligne d'objet mentionne hexadécimal.Si vous souhaitez convertir un zéro terminal ASCII chaîne comme «C31B" dans un unsigned int contenant 49947, puis sscanf () pourrait faire cela, mais c'est une fonction grande bibliothèque.Une main-écrit hex-string-to-unsigned-int serait petit et simple, si ce n'est la conversion que vous avez besoin.

 

Welcome to EDABoard.com

Sponsor

Back
Top