すごく漠然とした質問でもうしわけないのですが
UNICODEからASCIIへと変換するようなやり方 または 関数って
C++であるのでしょうか
初心者なもので よろしくおねがいします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

VCなら


MultiByteToWideChar


[MSDN ライブラリ 2001 年 4 月]
+ [MSDN ライブラリ 2001 年 4 月]
+ [Visual Studio 6.0 ドキュメント]
+ [Visual C++ ドキュメント]
+ [リファレンス]
+ [Microsoft Foundation Classe リファレンス]
+ [Microsoft Foundation Class ライブラリ]
+ [MFC テクニカル ノート]
+ [テクニカル ノート 59: MFC の MBCS/Unicode 変換マクロの使用]

BSTR sConvertFile = L"abc.txt";
USES_CONVERSION;
char* sAscConvertFile = W2A(sConvertFile);
    • good
    • 0
この回答へのお礼

解決しました ありがとうございました

お礼日時:2001/10/22 16:05

ASCIIは7ビットのコードで128通りの文字(制御コード等を含む)を表します。


(8ビットに拡張したコードはいくつかありますが、本来のASCII
一方、UNICODEは16ビットのコードで、65536通りの文字を表す能力があります。
(実際にどれだけ使われていたかは知りません。)
ところが、この中で、最初の128文字に限って言えば、配列はASCIIと全く同じ
です。従って、16ビットから7ビットにキャストするだけでいいはずです。

char ascii_char;
short unicode_char;
if (unicode_char<128)
ascii_char = (char)unicode_char;

こんな答えを求めている質問なのか、「自信なし」ですが。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2001/10/22 16:04

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QFlash8のユニコードについて。(mySQLとの連携)

Flash8とPHPとmysqlの連携でアプリケーションを作っています。

mysqlで作ったデータベースからphpで日本語のテキストを読み込み、ActionScriptで表示させたいのですが、ユニコード(?)が違うらしく文字化けが起こってしまいます。(ムービープレビューの際)
mysqlのユニコードShift-JISにしています。
Flashのユニコードを変更することはできるのでしょうか?

また、文字化け解消のアドバイスなどあればお願いします。

Aベストアンサー

System.useCodepage = true;

を_root上のフレームあたりに記述してください

useCodepageは標準で false となっていますが、
Shift-Jis標準の日本語圏OSではこれを true にすることで、
LoadVars等で取得した外部ファイルの文字列をShift-Jisとして認識し、解析・表示してくれます

ちなみにユニコードではなく文字コードのことですね
ユニコード(Unicode)とは文字コードの一種です

QVC++ マルチバイト文字とUniCode文字??

VC++のプロジェクトプロパティには文字セット指定があります
『マルチバイト文字セット』『UniCode文字セット』の2者が選択出来ますが、これらの選択の優劣は何処にありますか?
この選択の適否が分からない私は参考にしているサンプルがマルチバイトである時にはマルチバイトを、またUniCodeで書かれたサンプルを見ている際にはUniCodeを指定しており、恥ずかしいかぎりです
選択の判断基準を如何すれば良いのかご指導をお願い申し上げます

更に恥ずかしい質問】なぜC#には文字セット指定が見当たらないのでしようか???

Aベストアンサー

WindowsAPIの中で、文字列をパラメータにするものは
マルチバイト用、UniCode用で関数名が異なります。
例えばファイルを開くCreateFileでは第1パラメータが
ファイルのパス名なのですが、マルチバイト用では
CreateFileA、UniCode用はCreateFileWとなります。
ヘッダファイルの中では単にCreateFileとした時に、
どちらの関数を割り当てるかが文字セットにより決定
されるようになっています。
尚、一部のAPIではUniCodeでしか動かないものも
あります。

「優劣」という観点ではどちらが良いかとは言えません。
「仕様による」としか言えません。あるシステムからの
出力ファイルを受けて処理する場合はそのシステムの
コードに合わせるのが普通でしょう。
また、Office等で使用するVBA用のDLLを開発する場合、
文字列はマルチバイトで受け渡しされますので、マルチ
バイト文字をベースにするのが一般的です。
勿論、内部事情を知っていれば文字列で渡さないで、
文字列の内部アドレス(StrPtrで求まる)を長整数として
渡すことで、UniCodeベースで開発することもできますが、
見た目は何をやっているのか分かり難くなります。

C#は内部コードがUniCodeに決まっています。

WindowsAPIの中で、文字列をパラメータにするものは
マルチバイト用、UniCode用で関数名が異なります。
例えばファイルを開くCreateFileでは第1パラメータが
ファイルのパス名なのですが、マルチバイト用では
CreateFileA、UniCode用はCreateFileWとなります。
ヘッダファイルの中では単にCreateFileとした時に、
どちらの関数を割り当てるかが文字セットにより決定
されるようになっています。
尚、一部のAPIではUniCodeでしか動かないものも
あります。

「優劣」という観点ではどちらが良いかとは言えません。
...続きを読む

Qユニコード番号から、IMEパッドで文字入力したい

過去問がうまく調べられなかったので、改めてお尋ねします。

IMEパッドから、ユニコード番号を入力して漢字を入力する
方法があったように思うのですが思い出せません・・・。

漢籍の書名などの入力に使う、昔の漢字や異体字を入力したいのですが・・。
IMEパッドで文字一覧を選び、UNICODEを選ぶと、漢字がたぶんユニコード
番号順に表示されますが、ユニコード番号は漢字情報辞典でわかって
いるので、番号から入力がしたいのです。

Aベストアンサー

Wordでの入力方法の2例です。

1) 日本語入力で、「U」キーを打ち、続けてユニコード番号を打って「F5」キーを押します。
例えば、「U」「5」「F」「3」「E」と打つと、画面に「う5f3え」と表示されますが「F5」キーを押すと、先に打った文字が消え、IMEパットで「弾」がポイントされて表示されます。

2) 直接入力で、ユニコード番号を入力して、「Alt」キーを押しながら「X」キーを押すと、コード番号に対応した文字に、置き換えられます。

コード番号が分かっている場合は 2) の方が効率的と思います。

QUnicodeで保存されたtxtファイルを開いて編集後Unicodeで保存する方法について

VC++.NETを使ってプログラミングをしております。

タイトルの通り、Unicodeで保存されているtxtファイルを
開いて編集後、再びUnicodeのtxtで保存したいのですが、
具体的な方法がわかりません。

普通にCFileクラスで開いて、CStringクラスで編集後、
保存して大丈夫でしょうか?

サンプルプログラムが紹介されているWEBページや、方法を
ご存知の方教えてください。

Aベストアンサー

MFCのCStringはUnicodeに対応しているようです。また、CFileでUnicodeのファイルを読み書きしても問題はありませんでした。
http://www.microsoft.com/japan/developer/library/vccore/_core_strings.3a_.unicode_and_multibyte_character_set_.28.mbcs.29_.support.htm

CFile、CStringなど、MFCを使って処理されていますが、VC++.NETを使っているため、.NET Frameworkを使ってみるのはどうでしょうか?.NETはC#から使うのが一番ですが、C++からでも使用できます。

C++.NETでUnicodeファイルのRead/編集/Writeサンプル
------------------------------------------------------------------------------
#include "stdafx.h"
#using <mscorlib.dll>

using namespace System;
using namespace System::IO;
using namespace System::Text;

int _tmain()
{
  // Unicodeでsample.txtを読み込み
  StreamReader* sr = new StreamReader("sample.txt", Encoding::Unicode);
  String* buffer = sr->ReadToEnd();
  sr->Close();

  // "&"を"&amp;"に変換
  String* work = buffer->Replace("&", "&amp;");

  // Unicodeでoutput.txtに書き込み
  StreamWriter* sw = new StreamWriter("output.txt", Encoding::Unicode);
  sw->Write(work);
  sw->Close();

  return 0;
}

MFCのCStringはUnicodeに対応しているようです。また、CFileでUnicodeのファイルを読み書きしても問題はありませんでした。
http://www.microsoft.com/japan/developer/library/vccore/_core_strings.3a_.unicode_and_multibyte_character_set_.28.mbcs.29_.support.htm

CFile、CStringなど、MFCを使って処理されていますが、VC++.NETを使っているため、.NET Frameworkを使ってみるのはどうでしょうか?.NETはC#から使うのが一番ですが、C++からでも使用できます。

C++.NETでUnicodeファイルのRead/編集/Wr...続きを読む

Qユニコードを検索するには

メールを送信したとき、ユニコードを含む旨のメッセージが出ました。
そのユニコードを検索する方法を教えて下さい。
メールソフトはWindows mailです。メモ帳かWord に移しても方法があれば教えて下さい。

Aベストアンサー

エラーメッセージの意味は、ユニコードでしか表示できない文字 を含むと捉えた方が正解に近いと思います。
ユニコードでしか表示できない文字は、TeraPadへ貼り付けると ? で表示されるので直ぐに分かりますよ。
http://www.forest.impress.co.jp/lib/offc/document/txteditor/terapad.html

QC++導入または入門書として

大学でC言語をやっているのですが、せっかくなのでC++(VC++)も勉強したいと思っているのですが(実用ではCよりVC++ようなので)

Cはある程度分かっていることを前提にして、初期段階で読むのではこのサイト等を参考にすると

独習C++
Visual C++2005 シリーズ 林 晴比古
明解 C++ 柴田 望洋
C++プログラミング シリーズ ハーベイ M. ダイテル
等あるようですが
個人的にCを林さんのでやったので使いたいとは思っているのですがあまり評価がよくないようなのでどうしようか迷っています。

他の本もあわせてご推薦いただければありがたいです。

Aベストアンサー

★私も林さんの本で C/C++ を入門しました。
>個人的にCを林さんのでやったので使いたいとは思っているのですが
>あまり評価がよくないようなのでどうしようか迷っています。
 ↑
 入門なら問題ないです。
 この本で C++ を入門してもっと詳しい本を次のステップとして読めば良いです。
 林さんの本はあまり詳しくはないため C++ の標準テンプレート(STL)の解説書は
 別の本に頼るべきです。例えば次の本などを参考にして下さい。
 (1)http://www.amazon.co.jp/dp/4894714329/→『STL―標準テンプレートライブラリによるC++プログラミング 第2版』
 (2)http://www.amazon.co.jp/dp/477412401X/→『C++標準ライブラリの使い方 完全ガイド』
 また林さんの C++ 入門の次のステップでは下の本はどうでしょうか。
 (1)http://www.amazon.co.jp/dp/4774115738/→『C++クラスと継承完全制覇 (標準プログラマーズライブラリ)』
 あるいは次の VC++ のシリーズで学ぶとか。
 (1)http://www.amazon.co.jp/dp/4881358219/→『Visual C++〈1〉はじめてのWindowsプログラミング』
 (2)http://www.amazon.co.jp/dp/4881358227/→『Visual C++〈2〉はじめてのオブジェクト指向プログラミング』
 (3)http://www.amazon.co.jp/dp/4881358235/→『Visual C++〈3〉はじめてのMFCプログラミング』
 その他にも VC++ では C++/CLI の中間言語でもアプリケーションを作成できます。
 この場合は次の本を参考にして下さい。
 (1)http://www.amazon.co.jp/dp/4797336277/→『実践C++/CLI 極めるための基礎と実用テクニック』
 個人的には C++/CLI よりは C# を使いたいです。
 最近は C# も人気が出てきたようです。
・上記のを参考に本屋でリサーチして下さい。
 C++入門なので林さんので十分な気がします。
 C++言語の機能を一通り知りたいなら林さんの本をお勧めします。
 分かりやすかったから。でも STL の解説はないし、詳しくないので別の本が必ず必要になります。
・以上。ちなみに私が買った林さんのC++入門は古すぎてもう買えないようです。シニアとか(上)(下)に増えていますね。

参考URL:http://www.amazon.co.jp/dp/4797316608/,http://www.amazon.co.jp/dp/4797316616/

★私も林さんの本で C/C++ を入門しました。
>個人的にCを林さんのでやったので使いたいとは思っているのですが
>あまり評価がよくないようなのでどうしようか迷っています。
 ↑
 入門なら問題ないです。
 この本で C++ を入門してもっと詳しい本を次のステップとして読めば良いです。
 林さんの本はあまり詳しくはないため C++ の標準テンプレート(STL)の解説書は
 別の本に頼るべきです。例えば次の本などを参考にして下さい。
 (1)http://www.amazon.co.jp/dp/4894714329/→『STL―標準テンプレ...続きを読む

QPHPにおいて16進数のアスキー文字とユニコード

文字列の明確な違いがわかりません。

たとえば16進数のアスキー文字であれば

print "\x41";
とした場合 
A
という文字が出力されます。
また
print 0x41;
とした場合はアスキー文字ではなく
65という10進数における数値が出力されますね。
さらには
print "\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97";
と記述すると
文字列 という文字が出力されます。

ではそうではなくユニコード文字列というのはなんなのでしょうか?

一般てきに \u0000
という形式で表記される物ですが、コレがいまいちわかりません。
これは16進数のアスキー文字によるマルチバイト文字の再現と何がことなるのでしょうか?
たとえば、JSONなんかを単純に出力してみるとこのユニコード文字列という形式で表現されますよね?

このユニコード文字列の実態?を知りたいです。
よろしく御願いします。

Aベストアンサー

サクッと本題へ
一つ目の質問
A,出来ます
色々とやり方があります
コードを文字に変換し用意されている関数を使うこと
変換した後でコード化すれば任意のコードになるかと
・mb_convert_encoding('文字列','変換後コード','変換前コード')
・PDF_utf16_to_utf8 — 文字列を UTF-16 から UTF-8 に変換する
・PDF_utf32_to_utf16 — 文字列を UTF-32 から UTF-16 に変換する
・PDF_utf8_to_utf16 — 文字列を UTF-8 から UTF-16 に変換する
http://codezine.jp/article/detail/2668

二つ目の質問
A.はい、そうです
基本的にUnicodeと言えばUTF-16のLEなんですけれど
UTF32はマルチバイト文字列圏内では表現出来る文字が増えて嬉しい限りでしょうが
逆にマルチバイト文字列圏外では余計な情報なんですよね……
本当はUTF-8でも良いくらい、でもそれじゃマルチバイト圏内の人を蔑ろに……
なら、間を取って16にしようや……ってのが現在
なのでWindowsでUnicodeと言って使われているのは全国共通でUTF-16LE

先のURL先でffffと入れてみたら分かると思いますが1000のFなんですよね
……桁数が溢れてるんですよ、基本的にマルチバイトを使いたくなければ必要のない情報です
使いたければUTF-32にすればいいし、使いたくなければUTF-16にすればいいし
ただし、UNIX環境とかで使ってるコードは英語のみだぜ!って事ならUTF-8を使ったほうがいいです
英語圏のコードとかも入れやすいし……

サクッと本題へ
一つ目の質問
A,出来ます
色々とやり方があります
コードを文字に変換し用意されている関数を使うこと
変換した後でコード化すれば任意のコードになるかと
・mb_convert_encoding('文字列','変換後コード','変換前コード')
・PDF_utf16_to_utf8 — 文字列を UTF-16 から UTF-8 に変換する
・PDF_utf32_to_utf16 — 文字列を UTF-32 から UTF-16 に変換する
・PDF_utf8_to_utf16 — 文字列を UTF-8 から UTF-16 に変換する
http://codezine.jp/article/detail/2668

二つ目の質問
A.はい、そうです
基...続きを読む

QASCIIコード表の出力

ASCIIコード表を出力するプログラムを作成中なのですが、
1~32の’BEL’等が実行されてしまいコマンドプロンプト上に表示させることが出来ません。

現在、出力はcntをループさせ、
printf("%d | %c", cnt, cnt);
の様にしております。

よろしくお願いします。

Aベストアンサー

>表示させることが出来ません。

・決めごと(*)ですから・・・。逆に、「表示」できてしまうと、その文字に決めた(割り当てた)「制御」が働かなくなってしまう。
・例えば、cで printf( "\n" );としても改行(\n)してくれないと困りますよね。

★printf()文は、コンソールに【コード】を送っているだけ、たまたまそのコードが、割り当てた「図形文字」だった場合、その【文字】を「表示」する、と考えればいいのでは・・・。

>現在、出力はcntをループさせ、printf("%d | %c", cnt, cnt);の様にしております。

・参考URLのように、「制御文字」部分は、printf( "[%3d][%02X]\n", cnt, cnt);と10進と16進で【コード】そのものを「表示」させたら如何でしょう。

(*)
私は、EBSDICコードが文字コードとしての初物でしたが、まったくASCIIコードとは異なります。一企業(IBM)が決めただけ・・・。

参考URL:http://e-words.jp/p/r-ascii.html

>表示させることが出来ません。

・決めごと(*)ですから・・・。逆に、「表示」できてしまうと、その文字に決めた(割り当てた)「制御」が働かなくなってしまう。
・例えば、cで printf( "\n" );としても改行(\n)してくれないと困りますよね。

★printf()文は、コンソールに【コード】を送っているだけ、たまたまそのコードが、割り当てた「図形文字」だった場合、その【文字】を「表示」する、と考えればいいのでは・・・。

>現在、出力はcntをループさせ、printf("%d | %c", cnt, cnt);の様にしてお...続きを読む

Qpythonのユニコード型について

pythonで、日本語をユニコード型にして使わなければならない場面とは、例えばどのような場面なのかよくわかりません。encodeなどユニコードを扱うメソッドがユニコードを対象とするのはわかりますが、そもそもユニコードを扱わずに済むのならそれに越したことはないし、これは投稿して聞いてみようと思いました。

たとえばパソコンの上のインタープリタでは、
print "abdあ"+"\n"+"い"
は思い通りコンソールに出力されますし、
"abcあ"
も"abc\xe3\81\84"で、そのままです(UTF-8)。
これを、
u"abcあ"
とわざわざ"abc\u3042"にしてしまい入出力ではencode/decodeなど色々面倒になる、その理由がイマイチわからず、つまづいています。
①文字数を数えて処理するためにこのような面倒なことをしているのでしょうか。
②それとも日本語の文字によっては、ユニコードにしないと変なことが起こるのでしょうか。
③だとすると8bit文字列型のままで日本語を扱うpythonプログラムは普通には無いのでしょうか。

pythonを週末の趣味で始めました、初心者です。
使っているのはpython2.7です。
お恥ずかしい質問ですが、皆様どうぞよろしくお願いいたします。

pythonで、日本語をユニコード型にして使わなければならない場面とは、例えばどのような場面なのかよくわかりません。encodeなどユニコードを扱うメソッドがユニコードを対象とするのはわかりますが、そもそもユニコードを扱わずに済むのならそれに越したことはないし、これは投稿して聞いてみようと思いました。

たとえばパソコンの上のインタープリタでは、
print "abdあ"+"\n"+"い"
は思い通りコンソールに出力されますし、
"abcあ"
も"abc\xe3\81\84"で、そのままです(UTF-8)。
これを、
u"abcあ"
...続きを読む

Aベストアンサー

フツーに使う際には仰る通り、特に問題無いんじゃないんですか?

ただね〜、たまにね〜、例えば毛唐が作ったライブラリとか〜、UTF-8とかが通らなかったりする場合あるんですよね〜。

「ASCIIかい!」

とか言う時、どうしてもencode/decodeのお世話にならんとアカンケースがしばしば・・・・。

まあ、Python3だったらほぼそういう問題はないとは思うんですが、2.x系列だとたまにそういう「外部ライブラリとのやり取り」で、文字コードが原因だったりする事があります。

QC++ ソートのやり方

僕が作ったプログラムで、これはバブルソートなのかわからないので教えてください。
また、ほかのソートの仕方も教えてください。
よろしくお願いします。

汎用関数を使っているのでわかりにくいかもしれないですがお願いします。

#include <iostream>
using namespace std;

template <class X>void Sort(X *data, int size)
{
X temp;

for (int i = 0; i < size; i++){
for (int j = i + 1; j < size; j++){
if (data[i]>data[j]){
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}

int main()
{
int i[10]{1, 4, 3, 5, 2, 10, 2, 7, 6, 8};
char c[10]{'c', 'b', 'z', 'a', 'x', 'y', 'j', 'n', 'm', 'r'};

Sort(c, 10);
Sort(i, 10);

for (int j = 0; j < 10; j++){
cout << i[j] << ' ';
}
cout << endl;

for (int j = 0; j < 10; j++){
cout << c[j] << ' ';
}
cout << endl;


getchar();
return 0;
}

僕が作ったプログラムで、これはバブルソートなのかわからないので教えてください。
また、ほかのソートの仕方も教えてください。
よろしくお願いします。

汎用関数を使っているのでわかりにくいかもしれないですがお願いします。

#include <iostream>
using namespace std;

template <class X>void Sort(X *data, int size)
{
X temp;

for (int i = 0; i < size; i++){
for (int j = i + 1; j < size; j++){
if (data[i]>data[j]){
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}

int main()
...続きを読む

Aベストアンサー

バブルソートではないですね。
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88

選択ソートではないかと思います。
http://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%BD%E3%83%BC%E3%83%88


> また、ほかのソートの仕方も教えてください。

「ソート アルゴリズム」などで検索するといっぱい見つかると思います。
他の回答である通り、C++でプログラムを書くとしたら、std::sortを使うのが普通です。今回は勉強のために自分で書いてみているのでしょうけれど。

quick sortとか?
template <typename T>
void Swap(T& i0, T& i1) {
T tmp = i0;
i0 = i1;
i1 = tmp;
}

template <typename BiderectIter>
void QuickSort(BiderectIter begin, BiderectIter end)
{
typedef typename std::iterator_traits<BiderectIter>::value_type value_type;
if (begin < end) {
BiderectIter pivot_index = end - 1;
value_type pivot_value = *(end - 1);
BiderectIter store_index = begin;
for (BiderectIter it = begin; it != end - 1; it++) {
if (*it < pivot_value) {
Swap(*it, *store_index);
store_index++;
}
}
Swap(*store_index, *pivot_index);
QuickSort(begin, store_index);
QuickSort(store_index + 1, end);
}
}

merge sortとか?
template <typename Iter>
void Merge(Iter begin, Iter middle, Iter end)
{
typedef typename std::iterator_traits<Iter>::value_type type;
std::vector<type> tmp;
tmp.reserve(end - begin);
Iter fhead = begin, lhead = middle;
while (fhead != middle && lhead != end) {
if (*fhead < *lhead) {
tmp.push_back(*fhead);
fhead++;
} else {
tmp.push_back(*lhead);
lhead++;
}
}
if (fhead == middle) {
for (; lhead != end; lhead++) {
tmp.push_back(*lhead);
}
}
if (lhead == end) {
for (; fhead != middle; fhead++) {
tmp.push_back(*fhead);
}
}

Iter it = begin;
for (size_t i = 0; i < tmp.size(); i++) {
*it++ = tmp[i];
}
}

template <typename Iter>
void MergeSort(Iter begin, Iter end)
{
size_t size = end - begin;
if (size < 2)
return;

Iter middle = begin + size / 2;
MergeSort(begin, middle);
MergeSort(middle, end);
Merge(begin, middle, end);
}


呼び出し方はこんな感じになりますが。
QuickSort(&c[0], &c[10]);
MergeSort(&i[0], &i[10]);

バブルソートではないですね。
http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88

選択ソートではないかと思います。
http://ja.wikipedia.org/wiki/%E9%81%B8%E6%8A%9E%E3%82%BD%E3%83%BC%E3%83%88


> また、ほかのソートの仕方も教えてください。

「ソート アルゴリズム」などで検索するといっぱい見つかると思います。
他の回答である通り、C++でプログラムを書くとしたら、std::sortを使うのが普通です。今回は勉強のために自分で書いてみているのでしょうけれど。

q...続きを読む


人気Q&Aランキング