我目前正在尝试读取/写入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]
,我会得到67
和83
。这是正确的,但当我尝试打印address[8]
和address[9]
时,我只获得2
和0
,而不是02
和00
。这意味着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]);
}