バイト配列にシリアライズされたデータをデバッグする方法を理解しようとしています。このコードでは、ソリューションの試用が失敗した場合の問題を取り除いています。バイト配列へのキャスト後の値の印刷
私が達成しようとしているのは、配列全体のメンバー12345678
の印刷物をちょうど78
にすることです。
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>
int main()
{
uint32_t words[2] = {0x12345678, 0x87654321};
char * struct_array = &words;
printf("%x \n", *struct_array); // 78 prints a lsb byte from the first array member
printf("%lx \n", *struct_array); // 78 assuming it would print more than a single byte
//Perhaps it's printing a single byte because of the char pointer.
printf("%x \n", (uint32_t) *struct_array); // 78
printf("%lx \n", (uint32_t) *struct_array); // 78
// Nope
}
'あなたが知っているバイト数が多い場合は、それをまとめてください.'与えられた例の意味は? – TheMeaningfulEngineer
@TheMeaningfulEngineerその点をより詳細に示すコードが追加されました。 – unwind
@unwindこのデシリアライズ方法は、エンディアンに依存しません。しかし、 'data [n]'は 'int'にキャストされるので、' data [3] << 24'で符号付き整数オーバーフローが発生する可能性があります。 – Aconcagua