C言語関係掲示板

過去ログ

No.243.Unicodeに変換


No.1468

文字コードの変換
投稿者---龍(2002/05/03 17:16:01)


はじめまして龍と申します。

ここ最近、VC++をはじめました
よろしくお願いします。

 char szTest[255] = {("た")};
 char sztest[1];
 memset( sztest, 0x00, sizeof( sztest ) );
 char* pszTest = szTest;
 CString cstrCode;
 int nCounter = 0;
 while ( TRUE ) {
  if ( *pszTest == '\0' ) {
    break;
  }
  sztest[0] = *pszTest;
  BYTE nCode = (BYTE)(*sztest);
  CString cstrValue;
  cstrValue.Format( "%x", (unsigned long)nCode );
  cstrCode += cstrValue;
  pszTest++;
  nCounter++;
 }


今回、上記のようなソースで文字コードを取得しています。
しかし、返ってくる文字コードがシフトJISで困ってます。

上記ソースを実行して頂くと
cstrCodeに「82db」が返ってきます。

これはシフトJISで最終的に欲しいのはUnicodeの「305F」

char szTest[255] = {("た")};
をUnicodeに変換すればいいと思うのですが
HELP等を探しても一向に見つかりません。

どなたかお力をお貸し願えませんでしょうか?
よろしくお願いします。


No.1469

Re:文字コードの変換
投稿者---かずま(2002/05/04 03:12:49)


> char szTest[255] = {("た")};
>をUnicodeに変換すればいいと思うのですが

mbtowc を使えば、VC++ でも、Borland C++ 5.5 でも、gcc でも、g++ でも、
Unicode への変換が出来るようです。ただし、プログラムの先頭で、
setlocale(LC_ALL, "") または setlocale(LC_CTYPE, "") を実行して
おかないといけません。
/* C program */
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
    int n;
    wchar_t wc;

    setlocale(LC_ALL, "");
    n = mbtowc(&wc, "た", MB_CUR_MAX);
    printf("n = %d, wc = %#x\n", n, wc);
    return 0;
}
----------------------------------------------------------------------
// C++
#include <iostream>
#include <cstdlib>
#include <clocale>
using namespace std;

int main()
{
    setlocale(LC_ALL, "");
    wchar_t wc;
    int n = mbtowc(&wc, "た", MB_CUR_MAX);
    cout << "n = " << n << ", wc = 0x" << hex << wc << endl;
    return 0;
}


No.1477

Re:文字コードの変換
投稿者---龍(2002/05/07 17:57:16)



かずま様ありがとうございました。

mbtowcを利用して解決しました。



戻る


「初心者のためのポイント学習C言語」 Last modified:2002.06.22
Copyright(c) 2000-2002 TOMOJI All Rights Reserved