The complexity of what you want to do depends a lot on the ADC resolution and accuracy. For an 8-bit ADC, it's not much of a problem. For a 23- or 24-bit ADC, it's a lot more complicated.
Many microprocessors have uni-polar ADC built-in. The Arduino Uno, for example, has an ADC with a 0 to +5 V DC input range. The easiest way to use this with a bi-polar -2.5 to +2.5 V DC input is to offset the input with 2.5 V DC so that -2.5 V DC input becomes 0 V DC input and +2.5 V DC input becomes +5 V DC input.
If your input source is "floating" and not referenced to the ADC common, you can just insert a 2.5 V battery in series with the negative terminal of the source, negative terminal of the battery to common and positive terminal of the battery to the negative terminal of the source. Thus, when the source is at 0 V DC, the battery will make the positive terminal of the source +2.5 V DC and you would measure with the ADC the positive terminal of the source with respect to ADC common as +2.5 V DC for 0 V DC input. No op-amp required! The problem might then be finding a stable and accurate 2.5 V DC battery.
You could use an op-amp, connected as a unity-gain inverting summing amplifier, and apply -2.5 V DC as an offset voltage to an additional unity-gain inverting summing input. That is, use a 10 kΩ resistor from the op-amp output to the inverting input and connect two additional 10 kΩ resistors to the inverting input, one for the signal you will digitize and one for the -2.5 V DC offset. Apply the input signal you want to digitize (-2.5 V to +2.5 V DC) to one of the resistors and apply the -2.5 V DC offset to the other resistor.
Connect the non-inverting input to common through a 3.3 kΩ resistor, or actually through a resistor that is the value of three 10 kΩ resistors connected in parallel, but 3.3 kΩ will be close enough for most purposes. This resistor is there to equalize the bias-current offset voltage generated by bias currents flowing from the inverting and
non-inverting op-amp inputs. The result should be +2.5 V DC output when zero input is applied, rising to +5.0 V DC when the input is -2.5 V DC and falling to 0 V DC when the input is +2.5 V DC.
With the op-amp inverting the polarity of the signal input, the ADC output will vary from zero, with +2.5 V DC input, to full-scale with -2.5 V DC input. If you need to preserve the polarity information of the input signal, you can do this in software by performing math operations on the ADC output. The biggest problem with the offset binary approach is stability of the -2.5 V DC offset. For an 8-bit ADC the offset can usually be derived from a zener diode with sufficient stability and accuracy.
Another possibility is to use an absolute value circuit, of which there are plenty of examples on the Internet, to always present a positive, uni-polar input to the ADC. You can also add a polarity sensing circuit to provide a "sign" bit for the ADC conversion, a sometimes tricky operation when the input signal is nearly zero.
Did this help you?