When you feed it fffff as a text string, it uses (usually) UTF-8 to convert them to bits.
Almost all programmatic SHA libraries will take the input at face value and hash bits instead of text and strings. Some don't even let you input strings and text, having a strict type-checking requirement of bytes input.
In Bitcoin, we generate the SHA256 of the public key as a hex and not as a text. The problem is that I haven't found a way to do that in C#, but only as a text. (using SHA256.Create().ComputeHash(bytes))
Hex is the wrong term to use here, you should be hashing in terms of bytes, which is what this code snippet does btw. Are you sure you're not converting hexadecimal
characters into bytes and then hashing those in your code?
Crypto-related code should never intermingle hashing with character sets because these have to be decoded to bytes, and they have their own attack vector of vulnerabilities, which is compounded by the fact that different operating systems have different default character sets. (Windows for example does not use UTF-8 by default AFAIK)