这段代码如何产生十六进制值?

时间:2015-05-09 10:36:09

标签: java hex notepad++ hex-editors

任何人都可以“详细解释”这段代码如何生成一个类似左边图片的.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文件。左边的代码由上面的代码构成,我想更改代码,以便十六进制类型变得像右图。我该如何更改代码?
enter image description here

1 个答案:

答案 0 :(得分: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行被修改,但这可能取决于你的其余代码。