I have a similar issue which I solved with two stage macros. I am not sure that the following actually gives the result you are looking for, but it generates the correct string as far as I can see. Maybe it is something you can build on.
#define Event1 0x00ED3581
#define STR(x) #x
#define Get_EventID(code) STR(SWC_FAULT_CODE_)##STR(code)##STR(_EVENT)
cout << Get_EventID(Event1) << endl;