バイト列から文字列への変換はTEncoding.GetCharsを使えばできそうなのですが、バイト列が長いのでメモリ節約の意味で指定バイトずつ処理した場合、バイト列切り出し位置が必ずしも文字コードの境界と一致しません。その場合バイト列のどこまでを処理したかがわかれば次の処理すべきポインタに移動できると思うのですが、どのようにすれば可能になるでしょうか。
たとえばShift-JISバイト列やUTF8バイト列からUnicodeStringへの変換を考えています。
- ElementToCharLen (旧:ByteToCharLen)
- CharToElementLen (旧:CharToByteLen)
- ElementToCharIndex (旧:ByteToCharIndex)
- CharToElementIndex (旧:CharToByteIndex)
あたりでどうでしょう。
DEKOさんありがとうございます。
CharToElementLenで変換後のUnicodeStringに対して、バイト数を数えれば良いかと思ったのですが、ソースを見るとバイト数はOSのデフォールトエンコーディングつまりShift-JISにしたときのバイト数になっているようでした。SysUtilの中の別のルーチンも探してみます。
...では、
[MECSUtils]
http://cc.codegear.com/item/26061
- MecsElementToCharLen
- MecsCharToElementLen
- MecsElementToCharIndex
- MecsCharToElementIndex
これではどうでしょう?
ご紹介いただいたライブラリの手続きをいくつか組み合わせればできるような気がしました。やり遂げるのに時間が掛かりそうなので一旦解決とします。
ありがとうございました。
完全ではありませんが、
http://homepage1.nifty.com/ht_deko/tech021.html
MECSUtilsのリファレンスを作成しましたので御一読ください。
DEKOさんありがとうございます。
拝見します。いつも私の困っているところの道を切り開いていただいているように感じております。
ツイート | ![]() |