如何将指针中的字节复制到char []?

时间:2018-03-26 00:42:08

标签: c mmap memcpy fat32

我目前正在尝试读取/写入FAT32 disk.img。我使用mmap()将disk.img映射到内存中。这是以字节为单位的内存值:

4353 4333 3630 4653 0200 0000 1900 0000

0002 0000 0032 0000 0035 0000 0008 0000

如您所见,如果我打印address[0]address[1],我会得到6783。这是正确的,但当我尝试打印address[8]address[9]时,我只获得20,而不是0200。这意味着address[8]中2之前的数字0和address[9]中的前0都已被删除。

无论如何,我可以将address[8]address[9]的值一起复制到一个char[]吗?例如char s[] = "0200"。我试过了memcpy(),但我得到的错误是:

warning: incompatible integer to pointer conversion passing
  'char' to parameter of type 'const void *' [-Wint-conversion]
    memcpy(a, address[8], len);
              ^~~~~~~~~~
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/secure/_string.h:62:33: note: 
  expanded from macro 'memcpy'
            __builtin___memcpy_chk (dest, __VA_ARGS__, __darwin_obsz...

这似乎是我无法复制类型char *但只能输入const void *到我的目的地。非常感谢您的帮助!

int main(int argc, char* argv[]) {
    int fd = open(argv[1], O_RDWR);
    struct stat buffer;
    int status = fstat(fd, &buffer);
    char* address = mmap(NULL, buffer.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    printf("address[0] is : %d\n", address[0]);
    printf("address[1] is : %d\n", address[1]);
    printf("address[8] is : %d\n", address[8]);
    printf("address[9] is : %d\n", address[9]);
}

0 个答案:

没有答案