私のマシンでは、次のプログラムが1234をその出力に書き込みます。
const char str[] = "1234";
printf("%c%c%c%c\n",
(int) (0xff & (*(uint32_t*) str) >> 0),
(int) (0xff & (*(uint32_t*) str) >> 8),
(int) (0xff & (*(uint32_t*) str) >> 16),
(int) (0xff & (*(uint32_t*) str) >> 24));
これは、str
が内部的にとして表され0x34333231
、最初のバイトstr[0]
が最下位8ビットを表すことを意味します。
str
これは、リトルエンディアンでエンコードされていることを意味しますか?そして、このプログラムの出力はプラットフォームに依存しますか?
また、switch caseステートメントで1、2、4、および8文字の文字列リテラルを使用する便利な方法はありますか?*(const uint32_t* const) "1234"
定数式ではないため、文字列を整数に変換する方法が見つかりません0x34333231
。/0x31323334
はプラットフォームに依存する可能性があり、16進数で表記する必要があります。
編集:
言い換えれば、は0xff & *(uint32_t*) str
常にstr[0]
?
ええ、気にしないでください、それがそうだと気づいただけで、またその理由も。