コンパイル/前処理時に既知の文字列をintに変換することが可能かどうかを知りたいと思います。C - コンパイル時にStringをIntに変換する
私は文字「AB」との文字列を持っている想像して、私は労働組合のようにint型にそれを回すしたいと思います:
union StrInt
{
int i;
char c[2];
}
c[ ] = 'AB'
すると私は値を持つようになります16961
私は同じことをしたいが、編集/前処理中に
コンパイル/前処理時に既知の文字列をintに変換することが可能かどうかを知りたいと思います。C - コンパイル時にStringをIntに変換する
私は文字「AB」との文字列を持っている想像して、私は労働組合のようにint型にそれを回すしたいと思います:
union StrInt
{
int i;
char c[2];
}
c[ ] = 'AB'
すると私は値を持つようになります16961
私は同じことをしたいが、編集/前処理中に
はい。私のアーキテクチャに (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
メンバーを初期化する別の方法です。
これはpreprocing/compilation中に行われましたか?または実行?ありがとう;) – user7122079
"AB"はバイナリイメージに静的に焼き付けられ、実行時には単純にintとしてアクセスします。変換は必要ありません。値は静的には既知ですが、整数定数式(または現代のC++方言ではconstexpr)ではありません。 (事実上、整数定数が必要なスイッチや他の場所では使用できません) – PSkocik
多文字定数は非常によく定義されています。実装には長さだけでなく、エンディアンとエンコーディングもあります。より明示的に指摘しておきたはずです。 – Olaf
なぜこれをやりたいですか? –
私のアプリケーションには非常に便利です。 – user7122079
CはC++ではありません。Cはありません! – Olaf