質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2267閲覧

unsigned int 型を文字に変換したい

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/10 09:04

提示コードですが下記のようにunsigned int 型wchar_t型に変換してそれをchar型に変換するという処理を作ったのですがそれでaと入力すると97とう数字が出力されてしまいます。aというように表示させるにはどうしたらいいのでしょうか?

イメージ説明

cpp

1 2// ##################################### 一文字入力を取得 ##################################### 3std::string FrameWork::Window::getCharacterInput() 4{ 5 6 7 if (inputKey != 0) 8 { 9 wchar_t wc[3]; 10 char ch[10] = { '\0' }; 11 errno_t t = _itow_s(inputKey, wc, 10); 12 printf("%d\n",t); 13 14 15 size_t ptNum = sizeof(wc); 16 17 wcstombs_s(&ptNum,ch,sizeof(ch),wc,sizeof(ch)); 18 19 20 21 character = ch; 22 character += '\0'; 23 printf("%s\n",character.c_str()); 24 } 25 else 26 { 27 character = '\0'; 28 } 29 30 31 32 33 inputKey = 0; 34 return character; 35} 36 37 38

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2021/12/10 09:11

inputKeyにはかな漢字のような非ASCII文字も入りますか?
退会済みユーザー

退会済みユーザー

2021/12/10 09:34

GLFWのリファレンスに[Unicodeテキスト入力を目的としています] と書いてあります。 また(char)inputKeyとすると文字を表示出来るのですが日本語にも対応したいのでwchar_t型で行いたいです。
guest

回答2

0

ベストアンサー

UNICODE を扱う場合は std::string ではなく std::wstring を使用する必要があるのではないでしょうか。
以下、unsigned intstd::wstring に変換する例になります。
※ inputKey に Unicode 文字が入っていると仮定したサンプルです。実際にGLFW環境で日本語のテキスト入力が行えるかは検証していませんので留意下さい。

C++

1#include <stdio.h> 2#include <locale.h> 3#include <string> 4 5int main( int argc, char* argv[] ) 6{ 7 // ロケール変更(コンソールにUNICODE文字を表示させる為) 8 setlocale(LC_CTYPE, ""); 9 10 //wchar_t wide_inputKey = L'a'; // テストデータ(inputKey 用の入力データ) 11 wchar_t wide_inputKey = L'あ'; // テストデータ(inputKey 用の入力データ) 12 13 unsigned int inputKey = wide_inputKey; 14 wprintf(L"inputKey = [%c](%d)\n", inputKey, inputKey); 15 16 std::wstring wide_character; 17 wide_character += (wchar_t)inputKey; 18 wprintf(L"wide_character = [%s]\n", wide_character.c_str()); 19 20 return 0; 21} 22

■ 実行結果

C:\home\edu\teratail\questions\373231>hello inputKey = [あ](12354) wide_character = [あ]

なお、質問文にある以下のコードは使い方の誤りかと思います。

errno_t t = _itow_s(inputKey, wc, 10);

_itow_s は「文字コードを文字列に変換する関数」ではなく「指定した整数をN進数の文字列に変換する関数」です。
上記の例の場合、第3引数に「10」(10進数)を指定している為、97"97" という文字列に変換されることになります。

<参考>
■ Windowsのwprintf関数はUnicodeを出力できない?
https://blogs.osdn.jp/2020/04/24/wprintf.html
■ _itoa_s、_itow_s 関数
https://docs.microsoft.com/ja-jp/cpp/c-runtime-library/reference/itoa-s-itow-s

投稿2021/12/10 20:54

cx20

総合スコア4648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/11 08:16

なるほど。下記のように実装したのですがアルファベットは正常表示出来るのですが"あ"という文字を入れると"B"と出力されてしまいます。GLFWのリファレンスにないということはそもそも不可能なのでしょうか? [https://www.glfw.org/docs/3.3/input_guide.html#input_char] text input ページ部 if (inputKey != 0) { std::wstring input; input += (wchar_t)inputKey; character.clear(); character += *input.c_str(); character += '\0'; printf("%s\n",character.c_str()); } else { character = '\0'; }
cx20

2021/12/11 09:19

戻り値に使用している変数 character も std::wstring に変更されている、ということで良いでしょうか? また、printf() も wprintf() というように Unicode 対応バージョンに変更する必要があります。 ■ 主な変更箇所 ・setlocale(LC_CTYPE, "") … ロケール変更の追加 ・std::string → std::wstring ・printf() → wprintf() ・"" → L""
guest

0

C

1 ch[0]=(char)t; ch[1]='\0'; 2 printf("%s\n",ch);

投稿2021/12/10 10:59

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/12/10 11:52

質問のプロシージャに意味不明なところがありますが… それなら printf("%c\n", t); でいいのではと思います。 そして、質問者のコードでは t はエラー コードです。 出力したい文字のコードが inputKey でASCIIであると仮定すれば printf("%c\n", inputKey); ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問