glibcでワイド文字のバイト数を恣意的に変更してmakeするときの方法を
ご存知の方がいましたら教えてください。
glibcを使い、ワイド文字=4バイトのLinux環境下で、ワイド文字=2バイトとして
wchar系ライブラリ関数が使えるようコンパイルしたいと思っています。
makeするときに何かしら指定するオプションがあったりするのでしょうか。
それともソースの一部を触ってコンパイルしないといけないでしょうか。
同じソースから出来てると思われるLinuxとcygwinで、それぞれワイド文字が
4バイトと2バイトと違う形で環境が作られてるので、何かしら切り替える
方法があると思うのですが...
makefile、configure系ファイルをざっと見てみましたが、それっぽい指定が
できそうなキーワードを検索で見つけられませんでした。
なんでそんな事を考えているかというと、当Linux環境下で動くアプリが
Unicodeは1文字2バイト固定で、長い文字列を含むデータを作成するのです。
そのような状況で、iconvなどを使って一度全文字UCS-4に変えてから
wcs系関数を使うと、無駄が多いと思い、できればUCS-2として直接
データを扱えるようにしたいと思ったのです。
(競合対策のため、性能を第一優先としたい)
No.1ベストアンサー
- 回答日時:
一応、gccに-fshort-wcharオプションを指定してコンパイルすればwchar_t型をunsigned short intと同じサイズになりますが、それだけでまともに動くかどうかは十分な検証が必要です。
> 同じソースから出来てると思われるLinuxとcygwinで、それぞれワイド文字が
> 4バイトと2バイトと違う形で環境が作られてるので、何かしら切り替える
> 方法があると思うのですが...
GCC自体のソースは共通ですが、Cygwinの標準ライブラリはnewlibですのでglibcと同じではありません。
> そのような状況で、iconvなどを使って一度全文字UCS-4に変えてから
> wcs系関数を使うと、無駄が多いと思い、できればUCS-2として直接
> データを扱えるようにしたいと思ったのです。
wcs系の関数程度なら自作してもしれています。
(C++11やC11ならchar16_tで統一してもよいですが、そこまでしなくてもよいでしょう)
ちょっと面倒なのはwcscollとwcsxfrmぐらいですが、これらを使う機会はそう多くないはずです。
おススメしてくれた通り、wcs系関数に代替する関数を一式作りました。ありがとうございます。
コーディングはラクだったのですが、こういうライブラリ系関数は、テストにとても苦労しますね。
ライブラリは汎用性が高い分、テストケースも膨れ上がるという。
返事がとても遅くなりすみません。しばらくログインできない状態になって...
あのアカウント確認時のキャプチャ、画像が2つ出るけど、どうやって画像中の文字を記述したらよいのかわかりませんよね。w
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- UNIX・Linux Postfixでドコモメールに送信すると届くまで10分ぐらいかかる 6 2023/03/05 13:56
- その他(プログラミング・Web制作) プログラミング python pandas 固定長データの出力 2 2022/08/16 11:22
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) 【Excel】指定した文字列に該当する行を重複しないようにリスト 3 2022/03/30 12:27
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- PDF PDFソフト 1 2023/08/23 16:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
VB 2008: LenB関数の代行機能は...
-
PHP 文字列抽出
-
バイナリとBCDコード
-
「1TB」のHDDに日本語は何字入...
-
全角半角を調べるライブラリ関...
-
シフトJISの2バイト文字
-
最大長を用意せずにバイナリデ...
-
unicode←→JISコード
-
iconv変換後のサイズについて
-
任意のアルファベットの2進表...
-
Visual C++ 2008 Express Editi...
-
VBでShift_JISへurlエンコード...
-
memcmp バイナリデータの比較方法
-
UTF-8とUTF-16について質問です。
-
ポインター引数の関数でコンパ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
-
Javaで日本語1文字のバイト数
-
「1TB」のHDDに日本語は何字入...
-
機種依存文字をチェックしたい。
-
VBAでShift-JISのURLエンコード
-
GetWindowTextでアドレスバーか...
-
COBOL PICTUREで X,S,Vの意味
-
【VB2005】テキストボックス内...
-
URLは最高何文字まで可能なので...
-
1KBが1024byteな理由
-
ワイド文字のバイト数が取得で...
おすすめ情報