掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
WCHARの1文字比較 (ID:66400)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VS2005でMFCアプリケーションを作成していますが、CStringを 使わずに処理しようと思っています。 charの配列の末尾から半角空白と改行コード(\r\n)を削除するのに 下のコードを使っていました。 TrimRigth(char* pcRec) { long lCnt; lCnt = strlen(pcRec)-1; for(long l=lCnt;l>=0;l--){ if(pcRec[l] == ' '){ pcRec[l] = '\0'; }else if(pcRec[l] == '\n'){ pcRec[l] = '\0'; }else if(pcRec[l] == '\r'){ pcRec[l] = '\0'; }else{ break; } } } これをUNICODE対応のプログラムで使おうと思い次のように修正しました。 ( _T()で括っているのは試行錯誤時の名残です) TrimRigth(WCHAR* pcRec) { long lCnt; lCnt = wcslen(pcRec)-1; for(long l=lCnt;l>=0;l--){ if(pcRec[l] == ' '){ pcRec[l]=_T('\0'); }else if(pcRec[l] == _T('\n')){ pcRec[l]=_T('\0'); }else if(pcRec[l] == _T('\r')){ pcRec[l]=_T('\0'); }else{ break; } } } この処理だと、半角空白は削除されるのですが改行コードは削除 されませんでした。 エディットボックス内の改行コード"\r\n"では0x1000が入ってくるし テキストファイルから取得したデータでは、0x10が入っているのに なぜか「}else if(pcRec[l] == _T('\n')){」ここにヒットしてくれません。 仕方がないので現在は下のようにしています。 }else if(pcRec[l] == 4096){ // 16進の0x1000 }else if(pcRec[l] == 10){ // 16進の0x0a }else if(pcRec[l] == 13){ // 16進の0x0d UNICODEの場合は、2バイトで1文字というのは分かっているのですが この場合、\r\nのコードは「0D 00 0A 00」という感じで入っていて 0x1000とはこの2バイト分を見ているから、「0A 00」がそういう風に見え ているのだと思います。(半角空白が1バイトで見えているのは説明できませんが) そこで質問なんですが、UNICODEの2バイト1文字の1文字ずつ比較するには どうしたら良いのでしょうか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.