pp-to-stringで質問です。

たとえば、以下のようなコードがあります。
(let ((word (pp-to-string '(:string "hoge\nhage"))))
(print (mapcar (lambda (x)
(format "0x%02X" x)) word)))
wordのlisp-objectをpp-to-stringで変換し
価した時の値をhex表示します。

("0x28" "0x3A" "0x73" "0x74" "0x72" "0x69" "0x6E" "0x67" "0x20"
"0x22" "0x68" "0x6F" "0x67" "0x65" "0x5C" "0x6E" "0x68" "0x61" "0x67" "0x65" "0x22" "0x29" "0x0A")

こんな感じになり、改行のエスケープコードが非エスケープ
0x0A(\n) -> 0x5C(\) 0x6E(n) に変換されてしまいます。
これを回避する方法はないでしょうか?

理想としては↓を評価した時と同じになってほしいのです。
(let ((word "(:string \"hoge\nhage\")"))
(print (mapcar (lambda (x)
(format "0x%02X" x)) word)))

("0x28" "0x3A" "0x73" "0x74" "0x72" "0x69" "0x6E" "0x67" "0x20"
"0x22" "0x68" "0x6F" "0x67" "0x65" "0x0A" "0x68" "0x61" "0x67" "0x65" "0x22" "0x29")

つまり lisp-object
'(:string "hoge\nhage")
を変換したときに、
"(:string \"hoge\nhage\")"
という出力を得るには何をするのが適切でしょうか?
この例では \n だけを書いていますが \t など他のエスケープも文字コードに変換されずに、
エスケープコードとして文字列にのこしたままの出力を得たいのです。
この結果が得られるのであれば、pp-to-stringでなくても問題ありません。