Forth で、16 進数でエンコードされたメッセージを変換しようとしていました。次の3つの言葉が出てきました。動作しますが、見苦しく、不必要に複雑に見えます。
また、これは実際の解決策ではありません。結果をさらに操作するために別の文字列に保存したかったためです(現在のように画面に入力するのではなく)が、数値を追加する方法がわかりません(文字を表す) ) アドレスに...
では、非常に長いメッセージであっても、これをどのように行う必要があると思いますか? 最善の方法は何ですか?
\ This work on Gforth 0.7.3
: print ( addr u -- ) hex evaluate decimal emit ;
\ s" 48" print -> H
: hex-decode-char ( addr u n -- ) >r drop r> 2 * + 2 print ;
\ s" 48656C6C6F20776F726C6421" 0 hex-decode-char -> H
: hex-decode-string ( addr u -- ) 2dup dup 2 / 0 ?do i hex-decode-char 2dup loop 2drop 2drop ;
\ s" 48656C6C6F20776F726C6421" hex-decode-string -> Hello world!