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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren