【问题标题】:How this code makes that hex values?此代码如何生成该十六进制值?
【发布时间】:2015-07-20 06:12:42
【问题描述】:

谁能“详细”解释一下这段代码是如何生成像左图一样的 .cfg 文件的?我想改变它,让它变得像正确的吗?

setLastFileInTNM(getTnmInstalledPath(), getLastPath());

private void setLastFileInTNM(String TNMConfigFilePath, String fileTobeSetInTNM) throws Exception {
    //fileTobeSetInTNM  += " ";
    File file = new File(TNMConfigFilePath);
    char[] dt = fileTobeSetInTNM.toCharArray();

    char[] data = readFile(file);

    int offset = 145;
    int length = fileTobeSetInTNM.length();

    int j = 0;
    for (int i = 145; i < offset + length; i++) {
        if (j == dt.length) {
            break;
        }
        data[i] = dt[j];
        j++;
    }
    data[offset + length] = (char) 0;//for seprating the rest
    writeToFile(data, file);
    readFile(file);
}

此代码在 .cfg 文件中写入一个地址。下图是在 notepad++ 中比较两个 .cfg 文件。左边是上面的代码做的,我想改一下代码,让hex类型变成右图的样子。我应该如何更改代码?

【问题讨论】:

  • 图片在哪里?
  • 添加了@SashaSalauyou
  • 每行包含 16 个字节(每个字节显示两个十六进制数字),因此 145 / 16 = 9,更改应该出现在第 10 行,它们确实出现了。不知道为什么您在第 6 行中进行了较早的更改。双方是不同的,因为您通过 fileTobeSetInTNM 参数写入的数据是不同的。
  • 最右边的幻灯片不是来自上面的代码,我只是想改变代码,让它的十六进制值变成左边最右边的那个。 @帕洛
  • 从你所说的看来,情况正好相反。看起来右侧的数据是由您的代码生成的,而左侧的数据是您想要模仿的其他文件。相信这一点的原因是您的代码仅从位置 145 写入,并且发生在右侧,而在左侧,您在第 6 行和第 29 行有其他更改。文件名也表明了这一点。所以你需要详细说明你做了什么以及为什么。

标签: java hex notepad++ hex-editors


【解决方案1】:

右边的文字说

" D : \ M D S 8 3 1 0 . h e x ",而左边的文字是

" D:\MDS 8310.hex 1 0 . h e x "

这表明原始文件中数据的编码是每个字符 16 位,每隔一个字符留出空格,而在左边你只是将每个字符复制为一个字节,因此文件名过于简洁。如果您想以这种低级样式进行操作,只需添加行

data[++i] = 0x20; 

行后:

data[i] = dt[j];

并将for循环的上限增加到offset + length * 2

我不明白为什么您的文件在第 29 行和第 6 行也被修改了,但这可能取决于您的其余代码。

【讨论】:

  • 是的,第 29 行和第 6 行是因为代码的其余部分。
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2021-04-24
  • 2019-01-01
  • 2011-08-02
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多