2009年12月27日のブックマーク (2件)

  • バイト列→文字列変換ライブラリ(sbcl) - sileのブログ

    前回の知見(文字コード変換関数をC++で用意する云々)を反映して、FFIを利用した、バイト列を文字列に変換するsbclのライブラリを作成した。 ・unsafe-conv(0.0.1) 対応している文字コードは、UTF-8、Shift_JIS、EUC-JPの三つ。UTF-8以外のC++の変換関数については、この記事の末尾を参照(UTF-8に関しては前回を参照)。 完成度はともかく、速度だけならsbclの対応する関数(sb-ext:octets-to-string)より一桁程度速い。 ;; 使える関数は一つだけ > (unsafe-conv:octets-to-string (sb-ext:string-to-octets "ライブラリ")) --> "ライブラリ" > (unsafe-conv:octets-to-string (sb-ext:string-to-octets "ライブラリ"

    バイト列→文字列変換ライブラリ(sbcl) - sileのブログ
  • 文字列変換C++関数自動生成 - sileのブログ

    仕事柄(かどうかは分からないが)switch分岐を多用したCやC++の文字列(群?)変換関数を書く機会がたまにある。 例えば最近では、Shift_JISの全角文字(カタカナ+記号)を半角文字に変換するCの関数を作成した(このRuby拡張ライブラリの中で使われている関数)。 このような変換関数一つ一つを書くこと自体はそれほど大変でもないのだが、こういった関数の定義のほとんどは決まりきった(かつ大量の)switch文やcase節で占められており、それを毎回手で書いていくのは、面白くないし面倒。 なので、その手間を省くために、変換前・変換後の文字列の対応を渡すだけで、実際に変換を行う関数(C++)の定義を出力してくれるcommon lispの関数を作成してみた。 ソースコードは結構長い(150行前後)ので末尾にまとめて載せておく。 以降は動作例など。 ;; 全角のひらがな・カタカナを半角カタカナ

    文字列変換C++関数自動生成 - sileのブログ