ある市販プログラムに、文字列を送って操作するプログラムをVC++6.0で作り、使っていました。
最近、対象のプログラムが、Unicode対応に変更され文字列を受け付けなくなってしまいました。
今まで、Unicodeなど全く気にしていなかったんですが、
そこで、MSDNでUnicodeについて読んで見たんですが、
どうもVC++自体再インストールしなおして、Unicode対応に変更してします方法
など、少し大掛かりなことになってしまいそうです。
文字列は、英数字のみなんですが、手軽な方法はないものでしょうか?
よろしく、お願い致します。
.NETなら再インストールなんていらんけど、VC6だからかな?
どうしてもというなら、文字コードを調べて自分で変換関数を作ったら?
英数に限定されるなら大した文字数じゃないだろうし、UNICODEでアルファベットを書いたテキストファイルをバイナリエディタで開けば文字コードは分かるでしょ。
ま、俺なら再インストールするけど。
英数記号だけ?
なら簡単。
char buffer[256];
を
unsigned short buffer[256];
にして、
例えば、数字の0は、 0x30 ですが、
buffer[0] = (unsigned short)0x30;
ってするだけ。
文字列なら、
wstrcopy(const char *s, unsigned short buffer) {
int i;
for (i=0;i < strlen(s);i++) buffer[i] = (unsigned short)s[i];
buffer[i] = 0;
}
ってすればいいかな。
16ビットUNICODE の0x00FF 以下は、2〜3個の全角文字がありますが、
0x7F 以下は、ASCII と一対一で対応します。
上位バイトが0なだけ。
出力する直前にMultiByteToWideChar APIを使って変換すれば簡単です。
char ansi[256];
wchar_t unicode[256];
MultiByteToWideChar(CP_ACP, NULL, ansi, -1, unicode, sizeof (unicode)/ sizeof (unicode[0]));
いさま、mあさま、NAOさま
ご指導有難うございました。
なんとか、解決できました。
解決を忘れてまいした。
ツイート | ![]() |