我有以下String[]
:
63,64,65,66,67,68,69,6A,73,74,75,76,77,78,79,7A,
83,84,85,86,87,88,89,8A,92,93,94,95,96,97,98,99
每个元素都是字符的HEX ASCII代码:
63 -> 'c'
64 -> 'd'
etc..
所以这里是我的代码的相关部分,它应该在文件中写入相应的ASCII字符:
private static HashMap<String, Integer> HEXMAP;
static {
HEXMAP = new HashMap<String, Integer>();
HEXMAP.put("0", 0);
HEXMAP.put("1", 1);
HEXMAP.put("2", 2);
HEXMAP.put("3", 3);
HEXMAP.put("4", 4);
HEXMAP.put("5", 5);
HEXMAP.put("6", 6);
HEXMAP.put("7", 7);
HEXMAP.put("8", 8);
HEXMAP.put("9", 9);
HEXMAP.put("A", 10);
HEXMAP.put("B", 11);
HEXMAP.put("C", 12);
HEXMAP.put("D", 13);
HEXMAP.put("E", 14);
HEXMAP.put("F", 15);
}
public static void main(String[] args) {
try {
PrintWriter writer = new PrintWriter("resultFile");
for (String str : myString) {
append(str, writer);
}
writer.close();
}
catch(Exception e) {
}
}
private static int strToHex(String str) {
return HEXMAP.get(str.substring(0, 1)) * 16 + HEXMAP.get(str.substring(1, 2));
}
private static void append(String hex, PrintWriter writer) {
writer.print((char) strToHex(hex));
}
问题是,而不是这个:
我的结果文件中有以下内容:
(上面的截图来自十六进制编辑器)
答案 0 :(得分:1)
java.io.Writer
执行从Java'char'到文件中特定字符编码的转换。如果未明确指定此编码,则它将是您计算机的默认编码(取决于您的操作系统的“国家/地区”语言设置)
在您的情况下,您已经知道要写入文件的字节,因此不应使用Writer
字节,而应使用java.io.OutputStream
。写入文件的OutputStream
的子类是java.io.FileOutputStream
。
在您的示例中将Writer
替换为FileOutputStream
,并使用writer.print(
替换为.write(
并且它应该有效。
或者,如果您知道数据所在的编码,则可以将该编码添加为new PrintWriter
构造函数调用的第二个参数。看起来您可能正在使用ISO-8859-1编码,因此您也可以说new PrintWriter("resultFile", "ISO-8859-1")
。但是,如果您真的打算在该编码中编写字符,那么您应该这样做,而不是因为它恰好工作 - Writer和OutputStream之间存在明显的区别。
答案 1 :(得分:0)
您需要使用Eclipse中的调试器对其进行调试。我想问题是你将输入解析到myString数组。结果,你在7A之后得到一个意外的值,然后你的追加函数抛出,并且因为你有一个空的catch块,所以吞下了异常。您可以首先将e.printStackTrace()
添加到catch块中。