2016-11-27 6 views
1

コンパイル/前処理時に既知の文字列をintに変換することが可能かどうかを知りたいと思います。C - コンパイル時にStringをIntに変換する

私は文字「AB」との文字列を持っている想像して、私は労働組合のようにint型にそれを回すしたいと思います:

union StrInt 
{ 
    int i; 
    char c[2]; 
} 

c[ ] = 'AB'すると私は値を持つようになります16961

私は同じことをしたいが、編集/前処理中に

+2

なぜこれをやりたいですか? –

+0

私のアプリケーションには非常に便利です。 – user7122079

+3

CはC++ではありません。Cはありません! – Olaf

答えて

1

はい。私のアーキテクチャに (x86_64版-pc-linux-gnuのよう )、この:あなたが期待16961と同じように

union { 
    int i; 
    char c[2]; 
} u = { .c="AB" }; 

int main() 
{ 
    printf("%d\n", u.i); 
} 

プリント。

文字配列は、通常、文字列リテラルで初期化することができます。

{ .c= { 'A', 'B' } } 

は、cメンバーを初期化する別の方法です。

+0

これはpreprocing/compilation中に行われましたか?または実行?ありがとう;) – user7122079

+0

"AB"はバイナリイメージに静的に焼き付けられ、実行時には単純にintとしてアクセスします。変換は必要ありません。値は静的には既知ですが、整数定数式(または現代のC++方言ではconstexpr)ではありません。 (事実上、整数定数が必要なスイッチや他の場所では使用できません) – PSkocik

+0

多文字定数は非常によく定義されています。実装には長さだけでなく、エンディアンとエンコーディングもあります。より明示的に指摘しておきたはずです。 – Olaf

関連する問題