如何设置 fread 的起点?
How do I set a starting point for fread?
我正在尝试使用 fseek
和 fread
将二进制文件 (Game Boy ROM) 的字节 0x0100-0x3FFF 复制到我的模拟地址空间的字节 0x0100-0x3FFF;但是我不知道如何使用 fread
开始写入地址空间中的特定字节。这是受影响的代码;它按预期从 ROM 的 0x0100 开始读取,但它写入地址空间的 0x0000-0x3EFF,我的问题是,我怎样才能让 fread 从 0x0100 开始写入?
#include <stdio.h>
#include <stdint.h>
uint8_t addressSpace[0x10000];
int main()
{
FILE* gameROM = fopen("rom.gb", "rb");
if (gameROM == NULL || sizeof(addressSpace[0]) != 1)
{
printf("Error");
getchar();
fclose(gameROM);
return 1;
}
fseek(gameROM, 0x100, SEEK_SET);
fread(addressSpace, sizeof(addressSpace[0]), 0x3EFF, gameROM);
printf("\n%X\n", addressSpace[0x100]);
getchar();
return 0;
}
// v-- here
fread(addressSpace + 0x100, sizeof(addressSpace[0]), 0x3EFF, gameROM);
fread(addressSpace+loc, sizeof(addressSpace[0]), 0x3EFF, gameROM);
loc
是你要写的地方 addressspace
loc = 0x0100
我正在尝试使用 fseek
和 fread
将二进制文件 (Game Boy ROM) 的字节 0x0100-0x3FFF 复制到我的模拟地址空间的字节 0x0100-0x3FFF;但是我不知道如何使用 fread
开始写入地址空间中的特定字节。这是受影响的代码;它按预期从 ROM 的 0x0100 开始读取,但它写入地址空间的 0x0000-0x3EFF,我的问题是,我怎样才能让 fread 从 0x0100 开始写入?
#include <stdio.h>
#include <stdint.h>
uint8_t addressSpace[0x10000];
int main()
{
FILE* gameROM = fopen("rom.gb", "rb");
if (gameROM == NULL || sizeof(addressSpace[0]) != 1)
{
printf("Error");
getchar();
fclose(gameROM);
return 1;
}
fseek(gameROM, 0x100, SEEK_SET);
fread(addressSpace, sizeof(addressSpace[0]), 0x3EFF, gameROM);
printf("\n%X\n", addressSpace[0x100]);
getchar();
return 0;
}
// v-- here
fread(addressSpace + 0x100, sizeof(addressSpace[0]), 0x3EFF, gameROM);
fread(addressSpace+loc, sizeof(addressSpace[0]), 0x3EFF, gameROM);
loc
是你要写的地方 addressspace
loc = 0x0100