問題タブ [wchar-t]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
4556 参照

c++ - static_cast wchar_t* から int* または short* へ - なぜ違法なのですか?

Microsoft VC2005 および g++ コンパイラの両方で、次の結果はエラーになります。

win32 VC2005 の場合: sizeof(wchar_t) は 2 です

結果は

Mac OS X または Linux g++ の場合: sizeof(wchar_t) は 4

結果は

もちろん、いつでもreinterpret_castを使用できます。ただし、適切な整数型に static_cast することがコンパイラによって違法と見なされる理由を理解したいと思います。きっとちゃんとした理由があるのに…

0 投票する
4 に答える
8879 参照

c++ - C ++、WCHAR[]からstd::coutおよび比較

WCHAR[]をstd::coutに配置する必要があります...これはネイティブWifiAPIコールバックから渡されるPWLAN_CONNECTION_NOTIFICATION_DATAの一部です。

std :: cout<<var;を試してみました。ただし、最初の文字の数値アドレスを出力します。比較(var == L"some text")も機能しません。デバッガーは期待値を返しますが、比較は0を返します。この配列を標準の文字列(std :: string)に変換するにはどうすればよいですか?

前もって感謝します

0 投票する
4 に答える
3030 参照

c++ - WindowsターミナルでUnicode文字を出力する

この 1 週間、私は友人と一緒に C++ でローグライクゲームに取り組んでいました。ほとんどの場合、言語も学びます。

私は使用しています:

  • pdcurses
  • ウィンドウズ7
  • ビジュアル スタジオ C++

wchar_tコンソールの好きな場所に出力します。\u263B (☻) などの一部の Unicode 文字の出力には成功しましたが、\u2638 (☸) などの他の文字はクエスチョン マーク (?) になってしまいます。

出力に使用する関連コードを次に示します。

もちろん、退屈な ANSI 文字に頼ることもできます。しかし、完全な Unicode セットの文字で遊べるというのは本当にすばらしいことです。

要約すると、Unicode 文字が正しく出力されるようにするにはどうすればよいでしょうか?


編集:

わかりました。エンコーディングが正しく機能していることを確認しました。問題は、端末を強制的に Unicode リッチの font face に切り替える必要があることです。これを行うクロスプラットフォームの方法はありますか? これを行うためのWindows固有の方法さえありますか?

0 投票する
1 に答える
3784 参照

gcc - Windows および Linux で String から const wchar_t* への変換関数を機能させる方法

私は MSVCC / Windows 用に書かれたプロジェクトに取り組んでおり、GCC / Linux に移植する必要があります。プロジェクトには独自の文字列クラスがあり、そのデータを Qt の QString に格納します。wchar_t* への変換には、もともとこのメソッドがありました (Windows 用):

unicode() は QChar (16 ビットの長さ) を返すため、これは Windows では wchar_t が 16 ビットであるため機能しましたが、GCC では wchar_t の長さが 32 ビットであるため、機能しなくなりました。私はこれを使用してそれを解決しようとしました:

これに関する問題は、この関数が返されたときにオブジェクトがもう生きていないため、これがうまくいかないことです。この問題を解決するには、次のいずれかの方法しかないと思います。

  1. String::c_str() を使用せず、 .toStdString().c_str() を直接呼び出します
  2. GCC が wchar_t を 16 ビット型として扱うようにする

可能性 1 は、私にとって数時間の不必要な作業を意味し、可能性 2 が可能かどうかはわかりません。私の質問は、この問題を最もよく解決するにはどうすればよいですか? 有益な提案をいただければ幸いです。ありがとうございました。

0 投票する
5 に答える
904 参照

c++ - .c_str() 奇妙ですか? 韻も理由もなくデータが変更されますか?

私はこの単純な機能を持っています:

その関数の 2 行目に、正しい wchar_t* があります。しかし、私が戻ってくると、データはガベージデータに切り替わります。間に機能はありません。何が得られる?!

0 投票する
3 に答える
6007 参照

c++ - Cプリプロセッサで連結文字列をワイド文字に変換する方法は?

連結によって形成された多くの定数文字列(数字など)があるプロジェクトに取り組んでいます。

たとえば、メッセージやエラーを出力するときに、コード内のどこにいるかを知るために使用できる文字列にLOCATIONフォーマットするマクロが__FILE__あります。__LINE__

したがって、これは「file.cpp(42)」のような場所をフォーマットします。問題は、結果をワイド文字列に変換しようとしたときです。

これは GCC で問題なく動作し、L"file.cpp(42)" がコードに挿入されます。ただし、MSVC++ (Visual C++ 2008 Express を使用) でこれを試みると、エラーが発生します。

Lプレフィックスが式の最初の項にのみ追加されることを理解しています。私もこれを試しました:

これは「機能します」がL"\"file.cpp\" \"(\" \"42\" \")\""、特にこのマクロが他のマクロと比較して単純であることを考えると、明らかにあまり便利ではない (そして私が探しているものではない) 文字列を提供します。

それで、私の質問は次のとおりです。MSVC ++の式全体に適用するにはどうすればよいので、GCCで得ているのと同じ結果を得ることができますか? 全幅のトークンを含む 2 番目の文字列を作成したくはありません。これは、マクロごとに 2 つのマクロを維持する必要があり、あまり便利ではなく、バグにつながる可能性があるためです。さらに、各文字列の狭いバージョンも必要なので、残念ながらすべて広い文字列を使用することもできません。

0 投票する
6 に答える
15241 参照

c++ - wchar_tはunsignedshortの単なるtypedefですか?

たとえば、次のようになります。

次のように翻訳します。

0 投票する
2 に答える
330 参照

c++ - C ++:関数名に文字の種類を具体的に記載せずに読み取り/書き込みを行う良い方法はありますか?(cout vs wcoutなど)

テンプレートに基づいてファイルからプログラムを読み取るのに問題があります。次に例を示します。

これは、このクラスをでインスタンス化すると機能しますが、 (明らかに)<char>使用すると問題が発生します。<wchar_t>

クラスの外では、私は以下を使用しています:

このデータ構造体(これはa)からすべての情報を書き込むために、予測どおり、配列でないmap<basic_string<T>, int>場合はcoutが爆発します。iter->firstchar

私はオンラインで調べましたが、コンセンサスはwcoutを使用することですが、残念ながら、このプログラムではコンパイル時にテンプレートを変更できる必要があるため(<char>-> <wchar_t>)、coutまたはwcoutを選択するだけでどうすればよいかわかりません。つまり、多くのコードを変更せずにワイド文字を読み書きする方法がない限りです。

この説明がぎこちなく複雑に聞こえる場合は、お知らせください。できる限り対応させていただきます。

0 投票する
7 に答える
90442 参照

c++ - wchar_t値をコンソールに出力するにはどうすればよいですか?

例:

このコードは、住所などのHEX値のみを出力します。wchar_t文字列を出力する方法は?

0 投票する
4 に答える
4761 参照

iphone - wchar_tをNSStringにコピーする方法は?

stringWithFormat @ "%ls"を使用して実行していますが、コピーされた最初の文字のみが表示されます。これにより、1バイト文字であると想定されているように見えます。

何か案は?