What a rem is worth
A rem is a multiple of the root font size: the size set on the html element. Browsers start that at 16px, so 1rem is 16px until a stylesheet or the reader says otherwise, and the conversion is a single multiplication: px = rem × root font size. At the default, 0.5rem is 8px, 1.5rem is 24px and 2.5rem is 40px. Change the base font size here and the single result and the table both recalculate, which is what you want when a project sets its own root size.
The 62.5% case
The most common reason a rem value doesn’t measure what people expect is html { font-size: 62.5% }. That sets the root to 10px on a default browser, so 1rem becomes 10px and the arithmetic gets easy: 2.4rem is 24px. Projects adopt it precisely so the numbers are simple to read. If you’re converting values from a codebase that does this, type 10 into the base font size box or every answer will be too big by 60%.
rem and em are not the same
Both are relative, but to different things. A rem always refers to the root font size, wherever it’s used. An em refers to the font size of the element it’s written on, or its parent, so em values compound as elements nest: 1.2em inside another 1.2em ends up at 1.44 times the original size. That compounding is exactly why rem is the easier unit for spacing and layout, and why converting em to px depends on where in the document you are while converting rem to px does not.
Why convert back to px
Rem is the better unit to write, but pixels are often the easier unit to think in. Converting back is useful when you need to check a real measurement, whether a control clears a minimum touch size, whether spacing matches a design given in pixels, whether a max-width is as wide as you think. It also helps when a tool insists on pixels, as email templates, canvas drawing and some SVG attributes do. None of that is an argument for writing px in your stylesheet: a page built in rem respects a reader who has asked for larger text, and one built in px doesn’t.
Converting a whole stylesheet
Paste CSS into the converter and every rem length is rewritten in pixels at your chosen base, with a count of how many values changed. It knows the difference between a length and something that only looks like one, so comments, quoted strings, url() paths and custom property names such as --size-2rem are left alone, and 0rem becomes a plain 0. Media and container query conditions are left as they were, because a rem inside them means the browser’s default size rather than your root size, and changing them would move your breakpoints.
Nothing leaves your browser
There’s no server involved. The conversion is simple arithmetic that runs in the page as you type, so neither a single value nor a whole stylesheet is ever sent anywhere.