将字节数组从一种编码转换为另一种 java
Convert a byte array from one encoding to another java
大家好,我应该在 Java 中将此代码转换为 C#。你能帮帮我吗?
private static String ConvertStringToHexStringByteArray(String input) {
Encoding ebcdic = Encoding.GetEncoding("IBM037");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(input);
byte[] isoBytes = Encoding.Convert(utf8, ebcdic, utfBytes);
StringBuilder hex = new StringBuilder(isoBytes.length * 2);
foreach( byte b in isoBytes)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}
我试过像这样把它转换成java。但是结果不一样:
private static String ConvertStringToHexStringByteArray(String input) throws UnsupportedEncodingException {
byte[] isoBytes = input.getBytes("IBM037");
StringBuilder hex = new StringBuilder(isoBytes.length * 2);
for (byte b : isoBytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
input = "X1GRUPPO 00000000726272772"
expected = "e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2"
result = "e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2"
我做错了什么?
您的代码有效,但您正在比较两个不同输入字符串的输出。
当您并排写 expected
和 result
时:
e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2
您会注意到两者都以相同的序列 (e7f1c7d9e4d7d7d6
) 开头,这似乎来自一个共同的开头 X1GRUPPO
但是这两个输出不同:
4040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
40f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2
根据您提供的输入进行推理,第一个输入字符串的其余部分以 5 个空格开头,后跟 "00000000167353552"
这意味着 C# 代码的完整输入是 "X1GRUPPO 00000000167353552"
,这与您提供给 Java 代码的输入不同,显然输出不匹配。
大家好,我应该在 Java 中将此代码转换为 C#。你能帮帮我吗?
private static String ConvertStringToHexStringByteArray(String input) {
Encoding ebcdic = Encoding.GetEncoding("IBM037");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(input);
byte[] isoBytes = Encoding.Convert(utf8, ebcdic, utfBytes);
StringBuilder hex = new StringBuilder(isoBytes.length * 2);
foreach( byte b in isoBytes)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
}
我试过像这样把它转换成java。但是结果不一样:
private static String ConvertStringToHexStringByteArray(String input) throws UnsupportedEncodingException {
byte[] isoBytes = input.getBytes("IBM037");
StringBuilder hex = new StringBuilder(isoBytes.length * 2);
for (byte b : isoBytes) {
hex.append(String.format("%02x", b));
}
return hex.toString();
}
input = "X1GRUPPO 00000000726272772"
expected = "e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2"
result = "e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2"
我做错了什么?
您的代码有效,但您正在比较两个不同输入字符串的输出。
当您并排写 expected
和 result
时:
e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2
您会注意到两者都以相同的序列 (e7f1c7d9e4d7d7d6
) 开头,这似乎来自一个共同的开头 X1GRUPPO
但是这两个输出不同:
4040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
40f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2
根据您提供的输入进行推理,第一个输入字符串的其余部分以 5 个空格开头,后跟 "00000000167353552"
这意味着 C# 代码的完整输入是 "X1GRUPPO 00000000167353552"
,这与您提供给 Java 代码的输入不同,显然输出不匹配。