I haven't worked with BCD since college (a long-long time ago for me! ) but I remember it being pretty easy. And I think I've got the logic (but no code for you)...
It depends on what the real BCD format is (bytes, 16-bit words, etc.) but I THINK you just have to read & "weight" one nybble at a time and sum them up.
Let's you I have a BCD value of 54 (0101 0100)...
You can bit-shift or mask, or whatever to read the "5" and the "4" separately.
4 is just 4 and 5 represents 50, and these can be read and treated as two separate values/variables.
We simply add 4 + 50 = 54 (duh!) and we're done! We have regular integer that shows-up as 54 in decimal or you can optionally display it in hex (36) or binary (0011 0110).
Of course "inside" the computer/microcontroller everything is really binary, and in C/C++ variables/values are written and displayed in decimal by default.
...You don't have to save the separate BCD digit variables. You can make a loop and multiply by the weight and sum as you go-through the BCD number.
For testing/troubleshooting/experimenting, the built-in Windows calculator in Programmer Mode can convert between decimal, hex, binary, or octal. It doesn't use BCD but it can convert one nybble at a time because this is just binary-to-decimal or vice-versa.