mfc-ml

2004年07月

30

[mfc 49424] Re: 文字コードについて

yokoyama です。

> お世話になります。

> MFC関連ではないかもしれませんが、
> IA5キャラクターコードとは、どんなものでしょうか?

検索キーワード:IA5 キャラクターコード
検索エンジン:google
http://www.ntt-east.co.jp/ISDN/tech/spec/3.5pdf/3-f19.pdf
一発目にヒットしました。
IA5 は7ビットコードで、漢字は、SO/SI を使って表現する
って書いてあります。漢字とは書いてないですね。半角カナ文字
が来ないなら、SO/SI をそのまま漢字の契機にすれば良いかと。

SJIS で 「ABあCD」は、
JIS だと「AB@ws*CD」みたいになります。@ がSO で、* が SI
のつもりです。


> CStringから変換・取り出し出来るのでしょうか?
> 使用したいのは、漢字でです。

CString に与える前に JIS キャラクターコード体系を SJISまたは
UNI-CODE16 に変換する必要がありますね。
変換すればあとは普通に作業ができますね。

LPSTR jistosjis(LPCTSTR strjis  ,LPSTR buffer); //bufferを返す
LPSTR sjistojis(LPCTSTR strsjis ,LPSTR buffer); //bufferを返す

CString receiveStr = CString(jistosjis(jisStr,buffer));
        
以前は、CRT に sjistojis() , jistosjis() なんていう関数が入って
いたような気がするのですが、今は無い?ようで。

JIS SJIS 変換 文字コード
で「検索」して、変換処理サンプルを見つければよいでしょう。
     
30

[mfc 49422] Re: stringクラス


On Thu, 29 Jul 2004 19:08:40 +0900
"Fujisawa Yohei" <f...@ktb.netwk.ntt-at.co.jp> wrote:

> >  CString::GetBuffer は char * を返すので、std::string に同等の処
> > 理はないかと思ったです。std::string.c_str() は const char * を返
> > すです。

> これ無理やりキャストして動いちゃいましたけど、
> 駄目なんですかね・・・

  ダメです。const宣言は「値を変更しちゃダメだよ~」との意思
表示です。実際にconst宣言された変数の値を変更するようなコー
ドを書くとエラーになります。

> constだから
> char *p2 = (char*)strTmp.c_str();

  の先に続くコードがfputs(p2, stdout);なら問題なく動作します
が、fgets(p2, strlen(p2), stdin);だと何が起こるか保障されま
せん。最悪バッファの中を破壊したり、strTmpの内部状態が不整合
を起こしたりする可能性があるわけです。仮に今は問題なく動いた
としても、潜在的なバグとして忘れた頃に問題になるかもしれませ
ん。

-----------------------------------------------------------
   ヘヘ   ヘヘ       甕星 (Microsoft MVP)
  ミ''ミ ミ..ミ      E-Mail  : m...@abox9.so-net.ne.jp
 ヽ(  )   (  )ζ    
===========================================================
30

[mfc 49421] 文字コードについて

お世話になります。

MFC関連ではないかもしれませんが、
IA5キャラクターコードとは、どんなものでしょうか?
CStringから変換・取り出し出来るのでしょうか?
使用したいのは、漢字でです。

ご教授よろしくお願いします。

-柴田-
29

[mfc 49420] Re: stringクラス

Fujisawa Yoheiさんの<017701c47554$057c6e80$0100a8c0@FUJICHAWAX>から
>これ無理やりキャストして動いちゃいましたけど、
>駄目なんですかね・・・
>constだから
>char *p2 = (char*)strTmp.c_str();
>でもいいやとか思ってました・・・けど。

 駄目です。絶対に駄目です。動くけど駄目です。
 うちの会社でそんなソースを書いたら椅子が飛びます。
 ついでにバケツに水をいれて廊下に立たせます。

 どーせやるなら
 char *p2 = strdup(strTmp.c_str());
 とか。
 free するのが面倒なのであれば std::vector<char> を使うとか。

>何分頭が悪いくせにプログラミングが好きだから
>僕の場合たちわるいのですよね。

 キャストは警告やエラーを消すための道具ではありません:-p

>紹介して頂いたサイトで勉強させて頂きます。
>(日本語サイトの方で^^;)

 boost ですね。boost は覚えると便利なので、使ってみるのも面白い
かと思いますよ。
 wxWindows も面白いんですけどね…

-- 
電柱一家
mailto:m...@denchu.jp
29

[mfc 49419] Re: stringクラス



お世話になっております。 藤沢です。

電柱一家さん。

>  CString::GetBuffer は char * を返すので、std::string に同等の処
> 理はないかと思ったです。std::string.c_str() は const char * を返
> すです。

これ無理やりキャストして動いちゃいましたけど、
駄目なんですかね・・・
constだから
char *p2 = (char*)strTmp.c_str();
でもいいやとか思ってました・・・けど。

何分頭が悪いくせにプログラミングが好きだから
僕の場合たちわるいのですよね。

紹介して頂いたサイトで勉強させて頂きます。
(日本語サイトの方で^^;)

松夫さんがおっしゃるとおりCStringとstringは何の
関係もないことが分かりました。

希望はMFCを使わずC++でやりたいので、おっしゃ
るとおり、代替としてstringクラスを使うように勤め
ます。

社本@ワックさんがレスが気になったのですけど、
僕の使用しているバージョンは.NETです。

すると、CStringクラスが使えるような気がするの
ですけど、ATLを使用することになるのですね。

これが出来るととても嬉しいのですけど、、、
あちゃこちゃいじって試してみます。


不明な点などありましたらご連絡ください。
よろしくお願い致します。
記事検索
Amazon.co.jp
  • ライブドアブログ