「C++プログラムTips」の編集履歴(バックアップ)一覧はこちら
「C++プログラムTips」の最新版変更点
追加された行はこの色になります。
削除された行はこの色になります。
*** char* → ディスクリプタ
諸事情があってchar*データを、Symbianのディスクリプタで扱いたい場合
> char* c_str = "abcあいうM1234";
> // c_strを自前 SJIS-Unicode変換ライブラリにより変換(非公開スマソ)
> // ↓変換結果
> char unicode[] = {97, 0, 98, 0, 99, 0,
> 66, 48, 68, 48, 70, 48,
> 77, 0, 49, 0, 50, 0, 51, 0, 52, 0,
> 0, 0};
> TText* ttext = (TText*)unicode;
> TPtrC tptrc(ttext);
> label->SetTextL(tptrc);
> //label->SetTextL(iOutputString->Des());
ドコモサンプル02_FontExのCFontExLabelPageのCreateLabelLのところを差し替えると、簡単に実行&確認できると思います。
参考サイト
http://forum.newlc.com/
charとかで検索すると、
how to convert char * to TDes
http://forum.newlc.com/index.php/topic,9902.0.html
などなどが引っかかります(同様の質問が多数)。
----
*** char* ← ディスクリプタ
調査中・・・
適当コード(鋭意改版中)
> TPtrC tptrc; // どこからともなくでてきたTPtrC
> char unicode[1024];
> Mem::Copy(unicode, tptrc.Ptr(), tptrc.Length()*2);
> unicode[tptrc.Length()*2] = 0;
補足
自前コード変換なんかよりも、↓とか使ったほうがいいとは思うんだけど・・・(調査中)。
UIQ 2.1 SDK
>> Developer Library
>> API Reference
>> C++ API reference
>> Character Conversion
----
*** SJIS ⇔ Unicode
シフトジス⇔うにこーどの変換手順(注意:ここだけの話ですが、筆者は文字コードってあんまよくわかってません(瀧汗)。
- 1.mmpファイルの編集
-- ライブラリ追加
> LIBRARY charconv.lib
- 2.makefile再構築
-- 私の環境は、VCなので、
> abld makefile vc6
- 3.ソースの編集
-- includeファイル追加、変換サンプル
> #include <charconv.h>
> CCnvCharacterSetConverter* converter=
> CCnvCharacterSetConverter::NewLC();
> CCnvCharacterSetConverter::TAvailability ta =
> converter->PrepareToConvertToOrFromL(
> KCharacterSetIdentifierShiftJis,
> CEikonEnv::Static()->FsSession());
> if (ta != CCnvCharacterSetConverter::EAvailable)
> {
> return;
> }
> TInt state=CCnvCharacterSetConverter::KStateDefault;
>
> char* c_str = "M専ハァハァ";
> TText8* ttext8 = (TText8*)c_str;
> TPtrC8 tptrc8(ttext8);
> TBuf8<128> sjisText(tptrc8);
> TBuf<128> unicodeText;
>
> TInt ctu=converter->ConvertToUnicode(unicodeText, sjisText, state);
> if (ctu == CCnvCharacterSetConverter::EErrorIllFormedInput)
> {
> return;
> }
> CleanupStack::PopAndDestroy(); //clean for converter
> label->SetTextL(unicodeText);
ドコモサンプル02_FontExのCFontExLabelPageのCreateLabelLのところを差し替えると、簡単に実行&確認できると思います。
参考サイト(コピペ元)
How can convert Unicode to Iso88591?(with code)
http://forum.newlc.com/index.php/topic,2901.0.html
----
*** CのFILEによるファイルIO
やんごとなき事情があって、FILEを使わざるをえない場合
- 1. mmpファイルの編集
-- include パス、ライブラリ追加
> SYSTEMINCLUDE \epoc32\include
> SYSTEMINCLUDE \epoc32\include\libc
> LIBRARY estlib.lib
- 2.makefile再構築
-- 私の環境は、VCなので、
> abld makefile vc6
- 3.ソースの編集
-- includeファイル追加、FILE使用例
> #include <stdio.h>
> #include <string.h>
> // 入力・出力ファイルオープン
> FILE* rf = fopen("C:\\m1000.txt", "r");
> FILE* wf = fopen("C:\\m1234.txt", "w");
> // 入力・出力バッファ
> char line[1024];
> char wline[1024];
> TInt n = 0;
> while (fgets(line, 1024, rf) != NULL) //一行ずつ読み込み
> {
> // 適当に出力行を調整して
> sprintf(wline, "行[%04d][%04d]%s", ++n, strlen(line), line);
> // カキコ
> fputs(wline, wf);
> }
> // クローズ
> fclose(wf);
> fclose(rf);
参考ドキュメント
UIQ 2.1 SDK
>> Developer Library
>> API Reference
>> C++ API reference
>> C/POSIX Standard Library
(たぶん、このリファレンスにある関数は使えるんじゃないかなぁ・・・)
UIQ 2.1 SDK
>> Developer Library
>> Symbian OS Guide
>> C++ API guide
>> Base
>> C Standard Library
(ぜんぜん読んでないけど)
どこかのサンプルプログラムへコピペして、ブレークポイントとか
で動作を追ってみる(というほどのものではないけどね)といいかも。
もしかすると、Symbian流ファイル操作は↓なのかもしれません(苦笑)
UIQ 2.1 SDK
>> Developer Library
>> Symbian OS Guide
>> C++ API guide
>> Base
>> File Stores
----
- おお、初のTipsだw自分もこの辺でまだ悩んでたところなんで助かります(T-T)自分ももっとがんばらねば… -- ま~ (2005-08-28 14:06:16)
- でもコピペPGなんでこれでいいものか気になるところです。 -- 名無しさん (2005-08-30 00:04:02)
- 後はファイルのIOさえわかれば簡易なアプリも作れるんですけどね… -- Ryu (2005-09-07 13:54:11)
- てきとーにファイルIOを書いてみました -- 名無しさん (2005-09-08 00:17:33)
- 日本人だと文字コードがうんたらかんたらと面倒だな -- 名無しさん (2005-09-21 15:46:42)
- Symbianでファイル操作したければ、RFs, RFileといったクラスを使う必要があります。泣き所はfgetsのような改行を区切りに1行ずつ読むというのができないのが難点 -- ななし (2006-06-21 21:54:06)
+- 感謝します。SJIS変換できました。 -- 名無しさん (2007-10-15 21:58:37)
#comment
このwikiの更新情報RSS