【问题标题】:How do I set a starting point for fread?如何设置 fread 的起点?
【发布时间】:2015-01-07 16:38:37
【问题描述】:

我正在尝试使用fseekfread 将二进制文件(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;
}

【问题讨论】:

    标签: c fread stdio fseek


    【解决方案1】:
    //                     v-- here
    fread(addressSpace + 0x100, sizeof(addressSpace[0]), 0x3EFF, gameROM);
    

    【讨论】:

    • 非常感谢,发布的两个答案都正是我所需要的。
    【解决方案2】:
    fread(addressSpace+loc, sizeof(addressSpace[0]), 0x3EFF, gameROM);
    

    loc 是你想写信给addressspace 的地方

    loc = 0x0100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-28
      • 2020-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多