|
You last visited: Today at 17:50
Advertisement
[C] Arduino HEX to Decimal
Discussion on [C] Arduino HEX to Decimal within the C/C++ forum part of the Coders Den category.
01/31/2017, 15:20
|
#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.
|
|
|
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
|
|
|
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.
|
|
|
02/03/2017, 09:28
|
#4
|
elite*gold: 100
Join Date: Apr 2008
Posts: 860
Received Thanks: 1,489
|
Quote:
Originally Posted by Bundeskanzler2017
Daher schickt mir bitte nicht irgendeinen Code einer Website, da ich diesen sowieso schon kennen werden.
|
Quote:
Originally Posted by MarnelBautista
#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:
|
|
|
02/03/2017, 21:36
|
#5
|
elite*gold: 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.
|
|
|
02/08/2017, 16:34
|
#6
|
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
|
Quote:
Originally Posted by heskey
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)
|
|
|
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 ...
|
|
|
02/12/2017, 20:52
|
#8
|
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
|
Quote:
Originally Posted by florian0
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
|
|
|
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
|
|
|
02/12/2017, 21:24
|
#10
|
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
|
Quote:
Originally Posted by warfley
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!
|
|
|
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
|
|
|
02/12/2017, 22:45
|
#12
|
elite*gold: 104
Join Date: Dec 2016
Posts: 186
Received Thanks: 25
|
Quote:
Originally Posted by warfley
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
|
|
|
02/12/2017, 23:40
|
#13
|
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.
|
|
|
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)
|
|
|
 |
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.
|
|