Preprocessor Addition von zwei zahlen und Umwandlung in String

Gast #5430583
Lesenswert?
• ▲
▼
Hi Leute,

ich suche einen Weg beider Kompilierung der FW zwei Zahlen zu addieren 
und das Ergebnis als String  zu bekommen.
1
#define z1 0x100
2
#define z2  2
3
#define STR_HELPER(x) #x
4
#define STR(x) STR_HELPER(x)
5

6
#define add(x , y) STR(x+y)
7
int main( void )
8
{
9
    char test[] = add(z1, z2);
10
//das Ergebnis ist “0x100+2“
11
//Was ich brauche muss aber „0x102“ sein
12
}
Wie kann ich dem Prerocessor sagen, dass es zuerst addieren soll und das 
Ergebniss der Addition dann in String umwandeln?
Moderator (Firma: Titel) Persönliche Seite #5430593
Lesenswert?
• ▲
▼
Al3x schrieb:
> //Was ich brauche muss aber „0x102“ sein
Das bezweifle ich. Das ist nur das, was du willst.

Kein Mensch braucht einen String im Speicher, der die Firmware in 
BCD-Darstellung mit führendem 0x beinhaltet. Was brauchst du denn 
wirklich? Was soll denn mit diesem String später passieren? Warum muss 
die Firmwareversion überhaupt als String abgespeichert sein?
Gast #5430598
Lesenswert?
• ▲
▼
Als Ersatz könntest du vor dem kompilieren einen Script automatisch 
laufen lassen der dir die Strings in ein C File generiert. Den kannst du 
dann einfach kompilieren.

Den Script musst du aber so schreiben dass der seine Inputdaten 
irgendwie geschickt bekommt. C File parsen geht auch, dann bist du 
schnell dabei deinen eigenen preprocessor zu schreiben. Also eher Text 
File lesen oder C file Zeilen basiert lesen und suchen.
Gast #5430950
Lesenswert?
• ▲
▼
Der Preprocessor alleine kann das nicht. Aber er kann Dir helfen 
Monstermakros zu bauen, die dem Compiler Konstanten vorgeben, die er zur 
Compilierzeit auflösen kann :
1
#define ZAHL1 (42)
2
#define ZAHL2 (112)
3

4
#define HEXDIGIT(X) (((X)>9)?('a'+(X)-10):('0'+(X)))
5
#define STELLE(X,Y) (((X)>>(4*(Y)))&0x0f)
6
#define OHJA(U,V) (HEXDIGIT(STELLE((U),(V))))
7

8
const char hurz[]={'0','x',OHJA((ZAHL1+ZAHL2),3),OHJA((ZAHL1+ZAHL2),2),OHJA((ZAHL1+ZAHL2),1),OHJA((ZAHL1+ZAHL2),0),'\0'};
Moderator (Firma: Titel) Persönliche Seite #5430968
Lesenswert?
• ▲
▼
fop schrieb:
> Lothar M. schrieb:
>> Kein Mensch braucht einen String im Speicher, der die Firmware in
>> BCD-Darstellung mit führendem 0x beinhaltet.
> Reiht sich irgendwann hinter
>> 640k ought to be enough for everybody
> ein. ;-)
Auch eine Art berühmt zu werden...  ;-)

Aber es ist tartsächlich so, dass ich auch mit größter mentaler 
Anstrengung nicht verstehe, wozu man so einen String im Speicher 
brauchen könnte. Das sieht mir eher aus, als ob da wer die 
Zahlendarstellung und die Zahlensysteme miteinander verknotet hätte.
Gast #5430982
Lesenswert?
• ▲
▼
Also mir fällt da spontan <Unified Diagnostic Services (UDS; deutsch 
etwa „vereinheitlichte Diagnosedienste“)>[Zitat aus Wikipedia] ein. Im 
besonderen der Dienst Nummer 0x22 Read by identifier.
Du glaubst gar nicht, was Deine Kunden da alles auslesen können wollen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.