私のマシンでは、次のプログラムが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]?
ええ、気にしないでください、それがそうだと気づいただけで、またその理由も。