Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 17:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C] Arduino HEX to Decimal

Discussion on [C] Arduino HEX to Decimal within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
[C] Arduino HEX to Decimal

Hey. Ich möchte in Arduino HEX in Dezimalzahlen umwandeln.
Habe im Internet bereits 3 Stunden etwas vernünftiges gesucht, und nix gefunden. Daher schickt mir bitte nicht irgendeinen Code einer Website, da ich diesen sowieso schon kennen werden.
DerKanzler. is offline  
Old 01/31/2017, 16:09   #2
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Angenommen du hättest eine Hexadezimal zahl X mit n Stellen benannt x1 bis xn (also 0xx1x2..xn) dann ist X im 10er system = xn * 16^0 + x(n-1) * 16^1 + ... + x2 * 16^(n-2) + x1 * 16^(n-1). Als Summe also Sum (xi * 16^(n-i)) i=1 to n

Also als konkretes Beispiel die Zahl 0xF3A mit x1 = F = 15 x2 = 3 und x3 = A =10 wäre damit
10*1 + 3*16 + 15*16^2 = 3898

Das Programmieren davon solltest du selbst hinbekommen
warfley is offline  
Thanks
1 User
Old 01/31/2017, 16:27   #3
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,489
Kleine Hintergrundinfo (die man sich auch hätte ergoogeln können) zu warfleys Beispiel:
Jede Stelle einer Zahl hat eine Wertigkeit. Diese Wertigkeit nennt man Basis. Im Dezimalsystem ist die Basis 10, deshalb kann man ja auch z.B. die Zahl 25 als 2*10 + 5*1 darstellen. Im Hexadezimalsystem ist es die 16, im Dezimalsystem, wie gesagt, die 10, im Oktalsystem die 8 und im Binärsystem die 2. Und wenn du möchtest, kannst du auch jedes andere Zahlensystem zu jeder Basis definieren.

Die Wertigkeit der Ziffern steigt exponentiell an. z.B. 1 10 100 1000 10000 100000, auch darstellbar als 10^0 10^1 10^2 10^3 10^4 10^5 für das Dezimalsystem. Aber auch z.B. im Binären 1 2 4 8 16 ...
2^0 2^1 2^2 2^3 2^4 ... usw. Bei allen anderen auch.

Du kannst jede Zahl ins Dezimalsystem umrechnen, in dem du jede Stelle der Originalzahl mit ihrer Basis multiplizierst. 0xFA wäre somit 15 * 16^1 + 10 * 10^0. 0x31 wäre 3 * 16^1 + 1*10^0. etc.


Vom Dezimalsystem in ein anderes Zahlsystem zu kommen ist auch sehr einfach, aber danach hast du ja nicht gefragt.
florian0 is offline  
Thanks
1 User
Old 02/03/2017, 09:28   #4
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,489
Quote:
Originally Posted by Bundeskanzler2017 View Post
Daher schickt mir bitte nicht irgendeinen Code einer Website, da ich diesen sowieso schon kennen werden.
Quote:
Originally Posted by MarnelBautista View Post
#include <stdio.h>
#include <math.h>
#include <string.h>

int main() {
long long decimalNumber=0;
char hexDigits[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F'};
char hexadecimal[30];
int i, j, power=0, digit;

printf("Enter a Hexadecimal Number\n");
scanf("%s", hexadecimal);

/* Converting hexadecimal number to decimal number */
for(i=strlen(hexadecimal)-1; i >= 0; i--) {
/*search currect character in hexDigits array */
for(j=0; j<16; j++){
if(hexadecimal[i] == hexDigits[j]){
decimalNumber += j*pow(16, power);
}
}
power++;
}

printf("Decimal Number : %ld", decimalNumber);

return 0;
}


Herzlichen Glückwunsch Mr Copy&Paste. Du hast für diesen Beitrag sicherlich nichtmal 20 Sekunden gebraucht und musstest dabei noch nicht mal den Topic vollständig lesen. Wahnsinn. Vielleicht schreibst du freundlicherweise noch dazu, das so diesen herzlos Copy&Pasteten Quellcode von dieser Seite geklaut hast:
florian0 is offline  
Thanks
5 Users
Old 02/03/2017, 21:36   #5
 
heskey's Avatar
 
elite*gold: 0
The Black Market: 227/0/0
Join Date: Jan 2012
Posts: 3,111
Received Thanks: 994
Was möchtest du genau machen?
In C kannst du mit Dezimalzahlen genau so rechnen wie mit Hexzahlen.
Ausgeben kannst du die Hexadezimalzahlen auch direkt im Dezimalsystem mit %i im printf oder als Hexzahl mit 0x als Präfix oder ohne.
heskey is offline  
Old 02/08/2017, 16:34   #6
 
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
Quote:
Originally Posted by heskey View Post
Was möchtest du genau machen?
In C kannst du mit Dezimalzahlen genau so rechnen wie mit Hexzahlen.
Ausgeben kannst du die Hexadezimalzahlen auch direkt im Dezimalsystem mit %i im printf oder als Hexzahl mit 0x als Präfix oder ohne.
Wie oben bereits erwähnt: Die C von Arduino.
Ich möchte dem Bildschirm eine neue Farbe setzen.
Dieses kann ich mit HEX Zahlen, möchte es aber mit Dezimalzahlen machen.
(Arduino kann nur 12BIT Hex Zahlen)
DerKanzler. is offline  
Old 02/08/2017, 22:53   #7
 
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,489
Das Arduino C ist wie jedes andere C auch. Gib mal nen Codeschnipsel ... ich hab da so ne Vermutung, dass wir alle zu kompliziert gedacht haben ...
florian0 is offline  
Old 02/12/2017, 20:52   #8
 
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
Quote:
Originally Posted by florian0 View Post
Das Arduino C ist wie jedes andere C auch. Gib mal nen Codeschnipsel ... ich hab da so ne Vermutung, dass wir alle zu kompliziert gedacht haben ...
Nicht ganz.
Den Bildschirm setzen ist ganz eZ mit:
lcd.clear(0xFFF);

Statt dem Parameter 0xFFF möchte ich eine Dezimalzahl angeben
DerKanzler. is offline  
Old 02/12/2017, 20:59   #9
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Und was hindert dich daran? lcd.clear(0xFFF); ist das selbe wie lcd.clear(4095);

Wenn du R G B umrechnen willst würde das mit diesem makro gehen (für 0<=x<16 mit x aus {r, g, b})
Code:
#define RGB(r,g,b) (r<<8+g<<4+b)
Beispiel:
Code:
lcd.clear(RGB(15,15,15)); // Bildschirm weiß
lcd.clear(RGB(15,0,0)); // rot
// etc
warfley is offline  
Old 02/12/2017, 21:24   #10
 
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
Quote:
Originally Posted by warfley View Post
Und was hindert dich daran? lcd.clear(0xFFF); ist das selbe wie lcd.clear(4095);

Wenn du R G B umrechnen willst würde das mit diesem makro gehen (für 0<=x<16 mit x aus {r, g, b})
Code:
#define RGB(r,g,b) (r<<8+g<<4+b)
Beispiel:
Code:
lcd.clear(RGB(15,15,15)); // Bildschirm weiß
lcd.clear(RGB(15,0,0)); // rot
// etc
Meine Aufgabe ist es aber immernoch:
Eine Methode erstellen die *normale* HEX Zahlen
in Dezimalzahlen umwandelt!
DerKanzler. is offline  
Old 02/12/2017, 21:56   #11
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Ich glaube du hast mich nicht verstanden, Hex und Dezimalzahlen sind exakt das selbe, nur die darstellung ändert sich:
Code:
int i = 0xFFF;
// ist das selbe wie
int i = 4095;
Diese beiden zahlen machen exakt das selbe, beide schreiben die zahl 4095 in die variable i

Du musst nichts umwandeln
warfley is offline  
Old 02/12/2017, 22:45   #12
 
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
Quote:
Originally Posted by warfley View Post
Ich glaube du hast mich nicht verstanden, Hex und Dezimalzahlen sind exakt das selbe, nur die darstellung ändert sich:
Code:
int i = 0xFFF;
// ist das selbe wie
int i = 4095;
Diese beiden zahlen machen exakt das selbe, beide schreiben die zahl 4095 in die variable i

Du musst nichts umwandeln
Oke ich erläutere meine komplette Aufgabe nochmal.

Ich gebe in meinem Seriellen Monitor einen HTML Color Code ein.
Diesen muss ich irgendwie speichern (Problem 1)

Dann muss ich diesen Color Code, welcher als "FFFFFF" oder "00FFFF" gespeichert wird, als Bildschirmfarbe setzen. Dabei dachte ich an
eine Methode, welche diesen "Datentyp?" zu einer Dezimalzahl umformt
DerKanzler. is offline  
Old 02/12/2017, 23:40   #13
 
.Scy's Avatar
 
elite*gold: 15
Join Date: Jul 2010
Posts: 3,926
Received Thanks: 1,158
der datentyp dürfte ganz einfach ein char-array sein.

schreibst dir dann eine methode, welche über jedes char geht und diese dann je nach wertigkeit in ein int umrechnet und am ende halt das int returned.

code könnte ungefähr so aussehen:
Code:
int convert(char* arr, int size){
int result = 0;
for(int i = 0; i < size; i++){
int tmp = 0;
 //hier code für A-F erkennung

 result += tmp * pow(base, power);
}
return result;
}
die umrechnung von hex auf dezimal system wurde ja vorher schon erklärt, deswegen sollte sich power und base selbst ergeben. in diesem fall wäre es also 16 und eine power von 0,1,2.
.Scy is offline  
Thanks
1 User
Old 02/13/2017, 00:48   #14
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Wie wäre es so?
Code:
// let str be the given string e.g. str = "FF3A5D"
union {unsigned long iCol, byte rgba[4]} col;
sscanf(str, "%x", &col.iCol);
// In col.rgba[0] is blue
// In col.rgba[1] is green
// In col.rgba[2] is red
// In col.iCol is the combined color
Aber das funktioniert so nur auf nem little endian system (also nicht auf nem x86 ausprobieren, da wirds nicht gehen)
warfley is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
mumbi Funksteckdosen mit dem Arduino ein- und ausschalten?
05/09/2015 - Technical Support - 2 Replies
Hallo, gestern habe ich mir folgendes Set Funksteckdosen gekauft. http://www.amazon.de/gp/product/B002UJKW7K?psc=1& amp;r... Diese wollte ich nun mit meinem Arduino ein- und ausschalten, allerdings bekomme ich es einfach nicht hin und wollte euch deswegen um Rat fragen. Zuerst habe ich natürlich eine Steckdose mit der Fernbedienung gekoppelt
Arduino Fernbedienung
05/15/2014 - Coders Trading - 0 Replies
Liebe Community, ich hätte eine kleine Bitte, ich habe einen Programm für einen Arduino Uno geschrieben für ein Schulprojekt. Da ich noch ein ganzes Set mit Zubehör für diesen Arduino hatte, und bei diesem eine Fernbedienung dabei war, würde ich gerne die 8 LEDs per Fernbedienung (4 mit einem Knopf der Fernbedienung, 2 mit einem anderen und die letzten 2 auch mit einem anderen Knopf) steuern. Ich habe mich jetzt schon Stunden im Internet informiert wie dies funktioniert. Da ich bis jetzt noch...
RF ARduino
05/28/2013 - RF Online - 2 Replies
|RF Arduino PVP Server 2.2.3.2| Server Akan UP Tanggal 26 Mei 2012 Pukul 10.00 WIB |-Server Rate-| - Level 75 - Exp 2500x | Drop 45x | Animus 90.000x | Mining 45x | - All Reward Quest ON | Quest 50 & 56 OFF | All PT Skill/Force GM | - Buff Skill & Job 9000 Second - New Map | New Monster | New Animus | New Siege | New MAU |
[VB 2008] Textbox that doesn't shows decimal values!!?
06/02/2011 - .NET Languages - 0 Replies
Hi, Can someone post a code witch will stop the textbox from showing decimal values? PS: textbox will show the result of a math
The Decimal for these effect's?
08/29/2010 - CO2 Private Server - 25 Replies
Well, In C3/effect/other/ there are 2 folders Frost_app and Frost_end, Can someone please tell me what there Decimal/hex is ex: FrostStart = 0x000003857, Froztend = 0x2030230032; Could you explain how you got the answer to if possbile. Thanks a million,



All times are GMT +2. The time now is 17:50.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.