バイト列から文字列への変換 Delphi 2009

解決


三輪の牛  2008-09-28 06:01:15  No: 32059

バイト列から文字列への変換はTEncoding.GetCharsを使えばできそうなのですが、バイト列が長いのでメモリ節約の意味で指定バイトずつ処理した場合、バイト列切り出し位置が必ずしも文字コードの境界と一致しません。その場合バイト列のどこまでを処理したかがわかれば次の処理すべきポインタに移動できると思うのですが、どのようにすれば可能になるでしょうか。
  たとえばShift-JISバイト列やUTF8バイト列からUnicodeStringへの変換を考えています。


DEKO  2008-09-28 08:22:19  No: 32060

- ElementToCharLen (旧:ByteToCharLen)
 - CharToElementLen (旧:CharToByteLen)
 - ElementToCharIndex (旧:ByteToCharIndex)
 - CharToElementIndex (旧:CharToByteIndex)

あたりでどうでしょう。


三輪の牛  2008-09-29 19:34:49  No: 32061

DEKOさんありがとうございます。
  CharToElementLenで変換後のUnicodeStringに対して、バイト数を数えれば良いかと思ったのですが、ソースを見るとバイト数はOSのデフォールトエンコーディングつまりShift-JISにしたときのバイト数になっているようでした。SysUtilの中の別のルーチンも探してみます。


DEKO  2008-09-29 22:14:10  No: 32062

...では、

[MECSUtils]
http://cc.codegear.com/item/26061

 - MecsElementToCharLen
 - MecsCharToElementLen
 - MecsElementToCharIndex
 - MecsCharToElementIndex

これではどうでしょう?


三輪の牛  2008-09-30 06:41:43  No: 32063

ご紹介いただいたライブラリの手続きをいくつか組み合わせればできるような気がしました。やり遂げるのに時間が掛かりそうなので一旦解決とします。
  ありがとうございました。


DEKO  2008-09-30 10:46:17  No: 32064

完全ではありませんが、
http://homepage1.nifty.com/ht_deko/tech021.html
MECSUtilsのリファレンスを作成しましたので御一読ください。


三輪の牛  URL  2008-09-30 20:51:22  No: 32065

DEKOさんありがとうございます。
  拝見します。いつも私の困っているところの道を切り開いていただいているように感じております。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加