「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