\string# is the way to go, however you seem to use
\PackageWarning as part of a macro definition so you have to double it:
The macro definition of
\reserved@a might happen internally in a macro you are using. Some if-macros from the LaTeX core for example store both clauses in such temporary macros.
You could also define a macro for this character which then can be used in all
\PackageWarnings and other messages independent if they are in a macro definition or not.
\hashchar in the message. If you want a space behind it you need to use