ここでは、input から struct dev にデータを読み取りたいので、temp = (dev*) input を使用して char* から dev* にキャストしています。私のマシンでは、行printf("%p\n", temp); 0x804a040 を出力し、true の場合は行printf("%p\n", temp+1); を出力します。0x804a04b を出力するはずですが、0x804a04c を出力しました。行printf("%p\n", &temp->size); 0x804a047 を出力するはずですが、0x804a048 を出力しました。
私が誤解していることや間違っていることを理解するのを手伝ってください
@all: ご協力ありがとうございます。わかった。私はいくつかの投稿を読みましたが、ソリューションは #paragma pack(1) またはこのようなディレクティブを使用しています。しかし、それは precessor の処理を遅くするので、お勧めできません。それで、これについて他のアイデアはありますか?
感謝!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct dev
{
short id;
char name[5];
int size;
} dev;
char input[] = { 0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00,
0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00,
0x03, 0x00, 0x65, 0x67, 0x03, 0x00, 0x43, 0x43, 0x00, 0x43, 0x00 };
int
main (int argc, char *argv[])
{
dev* temp;
temp = (dev*)input;
printf("%p\n", temp);
printf("%p\n", temp+1);
printf("%d\n", temp->id);
printf("%p\n", &temp->name[4]);
printf("%p\n", &temp->size);
temp++;
printf("%d\n", temp->id);
return 0;
}