CanvasShoesのプロフィール
- ベストアンサー数
- 16
- ベストアンサー率
- 64%
- お礼率
- 0%
- 登録日2010/06/09
- UTF8→ShiftJISに変換したいです!
VC++2010, MFCです。 参考ページ(↓)でできそうだったのですが、 http://www.sutosoft.com/oldroom/devdiary/20020504.html UTF-8からShift_JISにしたいのは、メディアプレーヤーで作られた wpl ファイルも扱いたいからです。 具体的にいうと、ファイル一覧に プレイリストがあった場合、展開してメディアプレイヤーで開いて、再生後 【m3u ファイル】に(コーディングで)アウトプットするのが目的です。 ShiftJISに変換して、いったんファイルに出力してから、再度読込処理を行ってもかまいません。 BOOL C○○Dlg::UTF8ToShiftJIS(const CString& src, CString* dest) { int sizeOfString = (src.GetLength() + 1); LPWSTR lpsz = new WCHAR[sizeOfString]; //LPSTR lpsz = new char[ sizeOfString ]; _tcscpy_s(lpsz, sizeOfString, src); //strcpy_s(lpsz,sizeOfString, src); //delete[] lpsz //http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200612/06120010.txt //char* orig = "Hello, World"; char* nstring; nstring = new char[sizeOfString]; strcpy_s(nstring,sizeOfString, (LPCSTR)(lpsz)); // ●UTF8からUnicodeに変換した場合の長さを求める。● //http://msdn.microsoft.com/ja-jp/library/cc448053.aspx //const_cast<LPTSTR>(static_cast<LPCTSTR>(str) int iWideLength = ::MultiByteToWideChar(CP_UTF8, 0,【1】nstring, src.GetLength(), NULL, 0); if (iWideLength == 0)return FALSE; LPWSTR lpWideString = new WCHAR[iWideLength]; int iLength; if ( // ●UTF8からUnicodeに変換する。● (::MultiByteToWideChar(CP_UTF8, 0, 【2】nstring, src.GetLength(), lpWideString, iWideLength) == 0) // ●UnicodeからShift_JISに変換した場合の長さを求める。● || ((iLength = ::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, NULL, 0, NULL, NULL)) == 0) // ●UnicodeからShift_JISに変換する。● //http://msdn.microsoft.com/ja-jp/library/cc448089.aspx || (::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, 【3】(LPSTR)dest->GetBuffer(iLength), iLength, NULL, NULL) == 0)){ // ●変換に失敗● delete lpWideString; return FALSE; } // ●変換に成功● delete lpWideString; dest->ReleaseBuffer(); return TRUE; } ・・・という風に少し修正をして、次のソースで呼び出しています。 CString src; CFile file; if (file.Open(FilePath, CFile::modeRead)){ DWORD iLength = file.GetLength(); //CString src; file.Read(src.GetBuffer(iLength), iLength); file.Close(); src.ReleaseBuffer(iLength); CString dest; if (UTF8ToShiftJIS(src, &dest) ==TRUE){ MessageBox (dest); } // ●この時点で、destにShift_JISに変換された文字列が格納されている。 } 以下(↓)を参考に、【1】~【3】の部分で、他のパターンもキャストしてみたのですが・・・ /* http://d.hatena.ne.jp/shikaku/20090519/p3 ■[CPP][VC]LPCSTRなどのVC++の紛らわしい定義の意味 一見正体不明のVC++オリジナル定義。よーくみれば違いが分かる。名前 意味 LP *(ポインタ) C const TSTR TCHAR(char) STR char WSTR WCHAR(ユニコード用:2byte) ゆえに定義 正体 LPSTR char* LPCSTR const char* LPTSTR TCHAR* LPCTSTR const TCHAR* LPWSTR WCHAR* LPCWSTR const WCHAR* となる。+/ できるだけスマートに記述したいです。エクセル版を作っていたときは、CreateObject("ADODB.Stream")を使っていたみたいです。ただ、VC++でどう書けばいいか、分かりませんυ UTF8→UTF16→ShiftJIS ←これは、あまり、使いたくない 変換 です。 後は、これも参考になりそうですが、 http://www.softist.com/programming/sjis-utf8/sjis-utf8.htm bufUTF8を何型でどこで宣言すればいいのか?分かりません。 これも(↓)はてなです。 http://www.s-cradle.com/developer/sophiaframework/sf_reference/ref.SFXTextEncoding.html 何回も試しましたが、TRUEが返ってきても、変換前と変換後をMessageBoxで比べてみても、変わりがなく、漢字や記号の羅列でしかありません。どうか教えてください。
- UTF8→ShiftJISに変換したいです!
VC++2010, MFCです。 参考ページ(↓)でできそうだったのですが、 http://www.sutosoft.com/oldroom/devdiary/20020504.html UTF-8からShift_JISにしたいのは、メディアプレーヤーで作られた wpl ファイルも扱いたいからです。 具体的にいうと、ファイル一覧に プレイリストがあった場合、展開してメディアプレイヤーで開いて、再生後 【m3u ファイル】に(コーディングで)アウトプットするのが目的です。 ShiftJISに変換して、いったんファイルに出力してから、再度読込処理を行ってもかまいません。 BOOL C○○Dlg::UTF8ToShiftJIS(const CString& src, CString* dest) { int sizeOfString = (src.GetLength() + 1); LPWSTR lpsz = new WCHAR[sizeOfString]; //LPSTR lpsz = new char[ sizeOfString ]; _tcscpy_s(lpsz, sizeOfString, src); //strcpy_s(lpsz,sizeOfString, src); //delete[] lpsz //http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200612/06120010.txt //char* orig = "Hello, World"; char* nstring; nstring = new char[sizeOfString]; strcpy_s(nstring,sizeOfString, (LPCSTR)(lpsz)); // ●UTF8からUnicodeに変換した場合の長さを求める。● //http://msdn.microsoft.com/ja-jp/library/cc448053.aspx //const_cast<LPTSTR>(static_cast<LPCTSTR>(str) int iWideLength = ::MultiByteToWideChar(CP_UTF8, 0,【1】nstring, src.GetLength(), NULL, 0); if (iWideLength == 0)return FALSE; LPWSTR lpWideString = new WCHAR[iWideLength]; int iLength; if ( // ●UTF8からUnicodeに変換する。● (::MultiByteToWideChar(CP_UTF8, 0, 【2】nstring, src.GetLength(), lpWideString, iWideLength) == 0) // ●UnicodeからShift_JISに変換した場合の長さを求める。● || ((iLength = ::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, NULL, 0, NULL, NULL)) == 0) // ●UnicodeからShift_JISに変換する。● //http://msdn.microsoft.com/ja-jp/library/cc448089.aspx || (::WideCharToMultiByte(CP_ACP, 0, lpWideString, iWideLength, 【3】(LPSTR)dest->GetBuffer(iLength), iLength, NULL, NULL) == 0)){ // ●変換に失敗● delete lpWideString; return FALSE; } // ●変換に成功● delete lpWideString; dest->ReleaseBuffer(); return TRUE; } ・・・という風に少し修正をして、次のソースで呼び出しています。 CString src; CFile file; if (file.Open(FilePath, CFile::modeRead)){ DWORD iLength = file.GetLength(); //CString src; file.Read(src.GetBuffer(iLength), iLength); file.Close(); src.ReleaseBuffer(iLength); CString dest; if (UTF8ToShiftJIS(src, &dest) ==TRUE){ MessageBox (dest); } // ●この時点で、destにShift_JISに変換された文字列が格納されている。 } 以下(↓)を参考に、【1】~【3】の部分で、他のパターンもキャストしてみたのですが・・・ /* http://d.hatena.ne.jp/shikaku/20090519/p3 ■[CPP][VC]LPCSTRなどのVC++の紛らわしい定義の意味 一見正体不明のVC++オリジナル定義。よーくみれば違いが分かる。名前 意味 LP *(ポインタ) C const TSTR TCHAR(char) STR char WSTR WCHAR(ユニコード用:2byte) ゆえに定義 正体 LPSTR char* LPCSTR const char* LPTSTR TCHAR* LPCTSTR const TCHAR* LPWSTR WCHAR* LPCWSTR const WCHAR* となる。+/ できるだけスマートに記述したいです。エクセル版を作っていたときは、CreateObject("ADODB.Stream")を使っていたみたいです。ただ、VC++でどう書けばいいか、分かりませんυ UTF8→UTF16→ShiftJIS ←これは、あまり、使いたくない 変換 です。 後は、これも参考になりそうですが、 http://www.softist.com/programming/sjis-utf8/sjis-utf8.htm bufUTF8を何型でどこで宣言すればいいのか?分かりません。 これも(↓)はてなです。 http://www.s-cradle.com/developer/sophiaframework/sf_reference/ref.SFXTextEncoding.html 何回も試しましたが、TRUEが返ってきても、変換前と変換後をMessageBoxで比べてみても、変わりがなく、漢字や記号の羅列でしかありません。どうか教えてください。
- 文字列strの中から文字cを探すプログラム(C言語)がわからない
文字列strの中から文字cを探すプログラム(C言語)がわからない 柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。 僕が書いたプログラムを載せます。 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include<stdio.h> char *str_chr(const char *str, int c){ while(*str){ if(*str==c) return str; str++; } return NULL; } int main(){ char *str; char c; scanf("%s",str); scanf(" %c",c); printf("%d",str_chr(str,c)); return 0; } コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。 型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。 またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。 質問ばかりですみません。初心者でポインタがどうにも理解できないんです。 誰か詳しい人教えてください。 お願いします。
- ベストアンサー
- C・C++・C#
- hitoyo_tokikuu
- 回答数7
- C++ Win32APIでツールバーの位置を下にしたい。
C++ Win32APIでツールバーの位置を下にしたい。 C++ Win32APIを勉強中でして、ウインドウを作成し、ツールバーをCreateWindowsEXで作成したのですが、このツールバーをウインドウの下部に表示する事は出来ないのでしょうか? ネット上のサイトには作成までの手順は載ってはいたのですが、ツールバーの位置を変更する処理はどうしても見つかりませんでした。 どなたかご存知の方いらっしゃいましたらご指導のほどよろしくお願い致します。