2016-10-04 14 views
0

ペブルでヘブライ語を出力しようとしていますが、CコードでISO-8859-8エンコードされたchar *として指定されていますが、ISO-8859-8-Lエンコードされた文字列。これは、基本的に文字列を逆にすることを意味します。Cマクロのみを使用してASCII文字列を反転する

"ABC D" => "D CBA" 

入力文字列は8ビットASCII(マルチバイトまたはユニコードなし)です。 私はCコードで文字列のインプレース復帰を行う方法を知っていますが、次にinit()関数ですべての文字列を逆にする必要があるので、Cマクロを定義する方法があるのだろうかと思います。

+2

私は、Cマクロが文字列リテラルを部品に分割する方法はないと考えています。これは必要なものです。それは本当にマクロでなければなりませんか? –

+0

私が質問で書いたように、私はinit()関数でそれをしないために最適化を探しています。なぜなら、このウォッチフェイスのすべての文字列を完全に再構成する必要があったからです(これは、私はちょうどヘブライ語でテキストを表示しようとしています) – Gavriel

+0

シンプルなコンソールディスプレイやこれ以上のものはありますか?右から左に書き込むための標準的な方法が必要です。 Unicodeに変換して印刷するだけです。 –

答えて

0

私は文字列を逆転させるためにCPPを使用することに気づいていません。

以下のように、関数のようなマクロを使用できます。

#define rev_str(string, len) do {    \ 
    int i;          \ 
    for(i = 0; i < len>>1; ++i) {    \ 
     const uint8_t t = string[len - i - 1]]; \ 
     string[len - i - 1] = string[i];  \ 
     string[i] = t;       \ 
    }           \ 
} while(0) 

しかし、私はこれがインライン関数であることに比べてどのような利点があるかわかりません。

一方、これをコンパイル時に延期したいのであれば(マクロのみを使用したいと思うのであれば)、CPPの範囲を超えたもの、例えばC++テンプレートメタプログラミング。

+0

はい、私の意図は、HE( "...のようなものを追加するだけで、可能ならコンパイル時に行うことでした")。おそらく、すべての文字列を1つのファイルに再集計し、iconvなどを使用する必要があります。または、私はちょうど手動で文字列を反転させます:( – Gavriel

関連する問題