char* から wcharに変換 – プログラミング – Home

通知
すべてクリア

[解決済] char* から wcharに変換


佐倉
 佐倉
(@佐倉)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

普通の文字列をLPCWSTRに変換したいです。

char dataBuff[] = abcdefghijklmnopq;
wchar_t pwsz[sizeof(dataBuff)*2];
MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff), pwsz, sizeof(pwsz));
LPCWSTR Data = pwsz;
cout << Data << endl;

MultiByteToWideChar関数を利用し、変換できますが、
変換した結果を検証する仕方がわかりません。

dataBuff[] = aの場合
cout << Data << endlの結果が0012FF050
dataBuff[] = bの場合でも
cout << Data << endlの結果が0012FF050
になっています。

正しいですか?


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> wchar_t pwsz[sizeof(dataBuff)*2];

sizeof( wchar_t ) = sizeof( char ) * 2 なので
dataBuff と同じ文字数のバッファを確保するのであれば
wchar_t pwsz[ sizeof( dataBuff ) ];
で構いません。
[] の中は配列の要素数であり、確保するバイト数ではありません。

> dataBuff[] = aの場合
> cout << Data << endlの結果が0012FF050
> dataBuff[] = bの場合でも
> cout << Data << endlの結果が0012FF050
> になっています。

これでは、dataBuff のアドレスを表示しているだけで、その中身まで見ていないので
正しいかどうかわかりません。

> 変換した結果を検証する仕方がわかりません
MultiByteToWideChar の戻り値が信用できませんか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> MultiByteToWideChar関数を利用し、変換できますが、
> 変換した結果を検証する仕方がわかりません。

#include <iostream>
#include <locale>

...

std::locale::global(std::locale(japanese));
std::wcout << Data << std::endl;


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

つまりこーゆーこと。

#include <windows.h>
#include <iostream>
#include <locale>

int main() {
std::locale::global(std::locale(japanese));
char dataBuff[] = alphabet0123カタカナひらがな漢字;
wchar_t pwsz[sizeof(dataBuff)*2];
MultiByteToWideChar(CP_ACP, 0, dataBuff, strlen(dataBuff), pwsz, sizeof
(pwsz));
LPCWSTR Data = pwsz;
std::wcout << Data << std::endl;
return 0;
}

ちゃんと動いてます。


返信引用
佐倉
 佐倉
(@佐倉)
ゲスト
結合: 21年前
投稿: 43
Topic starter  

επιστημη さんの方法で、うまくできました。
ありがとうございました。

ちなみに、mbstowcsという関数もあって、これを使っても同じですよね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> mbstowcsという関数もあって、これを使っても同じですよね。

やってみて同じなら同じでしょうね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました