【问题标题】:Best way to convert hex string to string in Java?在Java中将十六进制字符串转换为字符串的最佳方法?
【发布时间】:2011-04-06 13:24:52
【问题描述】:

我返回的字符串形式的 “0×52 0×01 0×23 0×01 0×00 0×13 0×00 0xa2 0x40的0x53 0x2B访问写入0xAD 0x48 0x5F的的0x30的0x30 0X31 0x33的0x41 0x32的0x30的0x30 0x34的0x30 0x35 0x33 0x32的0x42的0x41 0x44进行”。我想将十六进制字符串转换为可读字符串 - 我是 Java 新手,并且正在这样做:

去掉空格和“x”,然后 删除第一个字符,然后删除每三个字符(即 0)。

必须有更好的方法来做到这一点,但我似乎找不到任何值得谷歌的东西。救命?!

【问题讨论】:

  • 你认为什么是可读的?
  • 你能写出你希望最终字符串的样子吗?
  • 您希望生成的字符串是什么样的?它只是“52012301”吗?还是您希望它们为十进制?还是将它们视为 ASCII/UNICODE 并显示字符值?

标签: java string


【解决方案1】:

如果您需要帮助完成您描述的转换,这里有一个方法:

  • 根据空格分割字符串(现在你有一个看起来像 0x 的字符串数组??

  • 对于数组中的每个元素,删除不喜欢的元素

  • 创建一个字符串并将每个数组元素连接到新创建的字符串中。

【讨论】:

    【解决方案2】:

    理论上应该可行(我认为)

    public class Test
    {
        public static void main(String[] args)
        {
            String input = "0x52 0x01 0x23 0x01 0x00 0x13 0xa2 0x00 0x40 0x53 0x2b 0xad 0x48 0x5f 0x30 0x30 0x31 0x33 0x41 0x32 0x30 0x30 0x34 0x30 0x35 0x33 0x32 0x42 0x41 0x44";
            String[] tokens = input.split(" ");
            for(String token : tokens)
            {
                int temp = Integer.parseInt(token.substring(2, 4), 16);
                char c = (char)temp;
                System.out.print(c);
            }
        }
    }
    

    但是,我得到了奇怪的输出(运行它,你会看到)。输入字符串应该有意义吗? (英语方面)

    【讨论】:

    • 我同意这个解决方案直到 char c = (char)temp。 user375566 应该在那里插入从 int 到可读字符串的转换(无论这意味着什么)。一种可能性是 System.out.print(" " + temp )。
    • @emroy - 将 int 转换为 char 是从 int ASCII 值到可读字符串的最常规转换。我认为问题要么是输入的十六进制值,要么是问题本身的歧义。
    【解决方案3】:

    为什么不基于0x..
    那是一个空格、一个零和一个 x
    它会更快更容易,而不必在每次迭代中删除 2 个字符。

    【讨论】:

    • 对于基于“0x”的输入“0x20 0x30 0x40”标记,建议将提供[“0x20”,“30”,“40”]的标记
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2014-10-24
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多