如何将不可打印的字符或字符串转换为十六进制?

发布于 2024-10-14 01:27:31 字数 752 浏览 1 评论 0原文

我有包含下一个十六进制演示文稿的字符串: “5f e8 d0 7b c0 f7 54 07 fb e4 20 f5 b8 10 67 a9”

您知道这只是十六进制,我需要从字符串中获取此十六进制表示。字符串看起来像: "ED>@@2.WW'KJ%z_{T g"

那么,如何从 "ED>@@2.WW'KJ%z_{T g" 十六进制表示 "5f e8 d0 7b c0 f7 54 07 fb e4 20 f5 b8 10 67 a9"?这是不可打印的字符,所以我不能使用它: <代码>

    public static String stringToHex(String arg) {
        return String.format("%x", new BigInteger(arg.getBytes()));
    }
result: -10404282104042104042104042104042104042c7eea21040428189104042104042f5. And also this returns me something strange:
System.out.println(String.format("%h", Integer.toHexString(buff.charAt(0))));
result: 6d1.

这段代码有时会起作用。数据来自套接字(作为字符串,因为我需要获得许多作为字符串的答案,并且只有这个身份验证挑战作为十六进制)。

I have String which contain the next hex presentation:
"5f e8 d0 7b c0 f7 54 07 fb e4 20 f5 b8 10 67 a9"

You understand that this is just hex and I need to get this hex presentation from String. String looks like:
"ED>@@2.W.W'KJ%z_{T g"

So, how to get from "ED>@@2.W.W'KJ%z_{T g" hex presentation "5f e8 d0 7b c0 f7 54 07 fb e4 20 f5 b8 10 67 a9"? This is unprintable characters so I can't use this:

    public static String stringToHex(String arg) {
        return String.format("%x", new BigInteger(arg.getBytes()));
    }


result: -10404282104042104042104042104042104042c7eea21040428189104042104042f5.
And also this returns me something strange:

System.out.println(String.format("%h", Integer.toHexString(buff.charAt(0))));


result: 6d1.

And this code sometimes works. The data comes from socket (as String because I need to get many answers as String and only this Auth Challenge as hex).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

多情出卖 2024-10-21 01:27:31

这是正确的解决方案:

public static String toHexString(byte[] bytes) {  
    StringBuilder out = new StringBuilder();
    for (byte b: bytes) {
        out.append(String.format("%02X", b) + " ");
    }
    return out.toString();
}

使用 Integer.toHexString() 的解决方案是错误的,原因如下:

  1. 它不会向字节 0x01 - 0x0F 添加前导零
  2. 它将字节 0x80 - 0xFF 打印为 2 的负整数补码表示法

This is the correct solution:

public static String toHexString(byte[] bytes) {  
    StringBuilder out = new StringBuilder();
    for (byte b: bytes) {
        out.append(String.format("%02X", b) + " ");
    }
    return out.toString();
}

Solution with Integer.toHexString() is wrong for the following reasons:

  1. It doesn't add leading zero to bytes 0x01 - 0x0F
  2. It prints bytes 0x80 - 0xFF as negative integers in 2's complement representation
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文