【问题标题】:Hex editing GBA in C++在 C++ 中十六进制编辑 GBA
【发布时间】:2012-09-02 09:10:21
【问题描述】:

我正在使用 XCode 在 Mac OS X 10.6 上编程。我正在尝试制作一个“解密”口袋妖怪 GBA 游戏的程序,以便您可以使用任何文本编辑器阅读游戏的对话框。

我已经完成了一个程序,所以我可以读取所有文本数据。

我的问题是,我需要在编辑后将明文改回十六进制,但我不知道我做错了什么。

string PathDE;
string PathGBA;
string Zeichen;
int kontrolle = 0;
int current = 0;

char buffer1[3] = "00";
char buffer2[3] = "a1";
...

schreiben.open(PathGBA.c_str(), ios::out | ios::binary); //writes out the edited hex
lesen.open(PathDE.c_str(), ios::in); //reads in the plain text


while(current <= kontrolle){
    lesen.read(reinterpret_cast<char*>(&a), 1);
    converter << a;
    converter >> Zeichen;
    if(Zeichen == "_"){
        schreiben.write(buffer1,3);
    }
    else if(Zeichen == "0"){
        schreiben.write(buffer2,3);
    }
...

我试过了,但是当我在十六进制编辑器中打开结果时,ASCII 码只有 a8.a8.a8.a8... 等等直到 eof,十六进制码是 61 38 00 ...直到 eof。

我也尝试了其他方法,但结果都一样,我无法将解码的 GBA 写为十六进制,所以我可以用编辑的文本播放它。

【问题讨论】:

  • 您希望它是 a8a8a8 吗?或 a8 a8 a8 a8 而不是 a8.a8.a8
  • 不,我不希望它是 a8 a8 a8。我想像这样翻译文本文件的内容:magicstone.de/rhw/files/andere/Rubylat.tbl
  • 你希望它是 00 00 00 或 00000000
  • 如果文本是“Hello there”,我希望它是 C2 D9 E0 E0 E3 00 E8 DC D9 E6 D9
  • 您是否正在阅读二进制文件、转换为十六进制字符串并且现在想返回二进制文件?还是您正在阅读二进制文件并且无法写出十六进制字符串?除了您的代码是德语这一事实之外,还缺少很多上下文,这可能会有所帮助:)

标签: c++ hex game-boy-advance


【解决方案1】:

您需要将字符串转换为具有正确编码的字节[]。 这是口袋妖怪的 Gen3 文本表 http://datacrystal.romhacking.net/wiki/Pok%C3%A9mon_FireRed_-_TBL

一旦正确转换,您只需将其插入您的 rom。

对不起,如果这没有多大帮助,但我只制作了 c# Pokemon 工具,而不是 c++。

顺便说一句,口袋妖怪不使用 ascii 十六进制加密它使用 utf8 的形式。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2011-11-20
    • 2012-02-12
    • 2011-06-01
    • 2018-02-01
    • 2012-05-07
    • 2011-12-19
    • 2011-12-09
    • 2015-12-09
    相关资源
    最近更新 更多