EDIT:間違ったタイプのnum2が修正されました。文字配列を整数にキャストする
こんにちは、
私は、バイナリファイルから読み取る生整数データが含まれている既知のサイズのいくつかの文字配列を持っています。
これらの配列のサイズはすべて整数です。
生データのエンディアンとこのコードを実行しているコンピュータが一致していると仮定して、以下の操作が安全で正確であるかどうかを質問したいと思います。
char arr1[4] = { ... };
char arr2[2] = { ... };
uint32_t num1 = *static_cast<uint32_t*>(arr1); /* OR num1 = *(uint32_t*)arr1 in C */
uint16_t num2 = *static_cast<uint16_t*>(arr2); /* OR num2 = *(uint32_t*)arr2 in C */
ありがとうございます!
バイナリファイルなので、生の整数をintの配列に読み込むほうがよいでしょう。 – chrisaycock
一度に複数の変数を宣言しないでください。微妙なバグにつながる可能性があります。 httwww://www.securecoding.cert.org/confluence/display/seccode/DCL04-C.+Do+not+declare+more+than+one+variable+per+declaration –
文字メモリを整数に直接キャストするワード整列ではなく、バイト整列のCPU上。もしあなたがIntel x86のみで動作しているのであれば、それは問題ではありません。 –