从字节到文本的Java解密

时间:2014-11-18 12:48:26

标签: java byte

我想编写一个带有byte数据的文本字段的java程序。我的程序输出应为string。我怎样才能做到这一点。任何意见都表示赞赏。

输入

  

85f960f0 82868260 f4f78486 60f8f6f

输出是字符串格式,如客户,英雄,英语..

我打算编写一个简单的java程序。

提前致谢。

很抱歉第一次错过了详情。我现在在学习阶段。

3 个答案:

答案 0 :(得分:0)

假设您有 byte[] bytes 并且可以使用 bytes.toString() 转换它,或者您可以逐字节更改

byte[] bites = new byte[]{24,4,72,56};

for(int i = 0; i < bites.length; i++)
    System.out.println(new String(bites, i,1));

答案 1 :(得分:0)

您的问题没有为完整答案提供足够的详细信息。假设片段&#34; 85f960f0 82868260 f4f78486 60f8f6f&#34;是你想要的输出......

  • 使用String.format()使用循环内的%x模式将字节数组转换为十六进制字符串。
  • 如有必要,使用%02x将每个八位字节填充为2位数
  • 如果每8个字符需要空格,可以通过使用%运算符检查计数器是否可被4整除来实现此目的。

例如。

byte[] valueFromTextField = "hello world foo bar".getBytes();
StringBuilder builder = new StringBuilder();
int i = 0;
for (byte element : valueFromTextField) {
    if (i % 4 == 0 && builder.length() > 0) {
        builder.append(" ");
    }
    builder.append(String.format("%02x", element));
    i++;
}
System.out.println(builder.toString());

输出

68656c6c 6f20776f 726c6420 666f6f20 626172

答案 2 :(得分:0)

String hexadecimals = textField.getText();
hexadecimals = hexadecimals.replaceAll("[^0-9A-Fa-f]", ""); // Remove garbage
int nn = hexadecimals.length();
if (nn % 2 != 0) {
    JOptionPane.showMessageDialog(null, "... must be even", JOptionPane.ERROR_MESSAGE);
    return "";
}
byte[] bytes = new byte[nn / 2];
for (int i = 0; i < nn - 1; i += 2) {
    int b = Integer.parseInt(hexadecimals.substring(i, i + 2), 16);
    bytes[i] = (byte) b;
}
return new String(bytes, StandardCharsets.UTF_8);

这使用整数范围内的基数为16(0-9A-F)的Integer.parseInt来忽略负字节值。

要将这些字节转换为文本(在Java中是Unicode以保存字符的任何组合),需要知道这些字节所在的文本编码。这里我使用UTF-8,但是需要遵守UTF- 8多字节格式。