从文件数据中读取short的值

时间:2014-08-05 11:48:40

标签: c

我有一个以结构开头的文件(由*数据指向)。

我想在内存中找到nsectionheaders的值,以便我可以使用它。

我试过这个,但它返回了一个奇怪的大负值。如何让它返回正确的值?

   void read_file_header(void *data) {

    int offset = (sizeof(char) * 16) + (sizeof(int) * 4) + sizeof(int) + (sizeof(short) * 6);
    char *pointer = (char *) data + offset;

    short num_sec_headers = 0;
    memcpy(&num_sec_headers, &pointer, sizeof(short));
    printf("The number of headers is %d\n", num_sec_headers);

   }

2 个答案:

答案 0 :(得分:2)

该行

memcpy(&num_sec_headers, &pointer, sizeof(short));

不正确。您正在获取指针的地址,而不是仅使用指针:

memcpy(&num_sec_headers, pointer, sizeof(short));

答案 1 :(得分:1)

标准中包含安全offsetof(包括stddef.h):

   void read_file_header(void *data) {
       int offset = offsetof(ElfFileHeader, nsectionheaders);
       short num_sec_headers;

       memcpy(&num_sec_headers, (char *)data + offset, sizeof(short));
       printf("The number of headers is %d\n", num_sec_headers);
   }