1

バックグラウンド

私はいくつかの組み込みプロジェクトに取り組んでおり、非標準の文字とフォントを処理しようとしています。

600 以上の要素配列に生のビットマップ フォントがあります。この配列の 5 要素ごとに 1 文字が含まれます。最初の 5 要素に 32 文字 (スペース)、6 ~ 10 要素に 33 文字 (!) などがあります。

国別の分音記号 ("ę" など) を処理する必要があります。122 文字の後に配置しました。print("Test ę");Cソースを入力したときに適切な文字が出力されるように、文字を再マップしようとしています。

問題

したがって、ソースに次のように入力します。

print("Test diactric ę");
// warning: (228) illegal character (0xC4)

これを試すと(Cが「ę」にどのコードを入れるかを確認しようとしました):

int a = 'ę';
// error: (226) char const too long

これを回避するには?

XC8 コンパイラ (gcc ベース?) を使用しています。

コンパイラのマニュアルで、7 ビット文字エンコーディングを使用していることを確認しましたが、何か方法があるのでしょうか? ソース ファイルは UTF-8 でエンコードされています。

編集

エミリエンによって提案された wchar.h は私にとってはうまくいくように見えますが、残念ながら私のコンパイラには wchar.h がありません。

たぶん、プリプロセッサのトリックですか?次のような筋金入りのテキスト準備は本当に避けたいです。

print("abcde");
print_diactric(123); // 123 code used for ę
print("fgh");

// to get "abcdeęf" "word"
4

2 に答える 2

2

ソース エンコーディング(コンパイラが実行されるシステム上の C ソース ファイルで使用される文字エンコーディング) とターゲット エンコーディング(コンパイラがシステムに対して想定するエンコーディング)の違いについて考える必要があります。コードが実行される場所。

コンパイラのターゲット エンコーディングが「7 ビット」の場合、ę のような文字を表現する標準的な方法はありません。単にターゲット文字セットの一部ではありません。おそらく、他の形式から自分でエンコーディングを実装することによって、それを回避する必要があります。

于 2014-05-12T08:41:35.400 に答える
1

アンワインドが説明したように、これらの文字をエンコードするには 7 ビット以上が必要です。ワイド文字タイプを使用できますか?

#include <wchar.h>
#include <stdio.h>

int main(){
    printf("%s\n", "漢語");
    printf("%s\n", "ę");
}

出力:

~$ gcc wcharexample.c -o wcharexample && ./wcharexample 
漢語
ę
于 2014-05-12T08:47:24.263 に答える