当前位置: 首页 > 面试题库 >

使用Java将十六进制转储的字符串表示形式转换为字节数组?

姜正初
2023-03-14
问题内容

我正在寻找一种方法来转换长字符串(从转储),该字符串将十六进制值转换为字节数组。

我的口头禅比在这里发表同样问题的人更好。

但是为了保持其原始性,我将以自己的方式来表述:假设我有一个字符串"00A0BF",我想将其解释为

byte[] {0x00,0xA0,0xBf}

我该怎么办?

我是Java的新手,最终使用BigInteger并注意前导十六进制零。但是我认为这很丑陋,并且我肯定我缺少一些简单的东西。


问题答案:

我认为以下解决方案比迄今为止发布的解决方案更好:

/* s must be an even-length string. */
public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

改进的原因:

  • 前导零(与BigInteger不同)和负字节值(与Byte.parseByte不同)是安全的

  • 不会将String转换为char[],也不会为每个字节创建StringBuilder和String对象

  • 没有可能不可用的库依赖项

assert如果未知参数是安全的,请随时通过或例外添加参数检查。



 类似资料:
  • 将可变长度十六进制字符串(例如,转换为包含该数据的字节数组的最佳方式是什么。 即转换: 进入这个 还是这个 因此,当我将此写入一个文件并将其写入hexresp-C时,我将得到包含的二进制数据。

  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:

  • 问题内容: 我在ex中有整数。16,我正在尝试将此数字转换为十六进制数字。我试图通过使用十六进制函数来实现此目的,但是每当您向十六进制函数提供整数时,它都会返回十六进制数字的字符串表示形式, 有人可以告诉我如何将字符串格式的十六进制数字转换为简单的十六进制数字。 谢谢!! 问题答案:

  • 问题内容: 我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串: 没关系!但是我丢失了字符串左侧的零。例如: 该方法返回此:123456789ABCDEF,但我想返回此: 00000123456789ABCDEF 问题答案: 而不是我将使用解析值,然后以所需的宽度(在您的示例中为21)输出值:

  • 问题内容: 我也想将我的二进制(在字符串中)转换为十六进制字符串,这只是一个程序片段,因为该程序只是另一个更大程序的一部分: 问题是我不知道填充是否有效,但是我确定该程序返回了二进制字符串的错误十六进制转换,我正在尝试这样做: http://www.wikihow.com/Convert-Binary-to- Hexadecimal PS:我需要实现它(不使用任何内置函数) 问题答案: 如果您不必

  • 问题内容: 您好,我正在尝试转换十六进制字符串,例如String hexStr =“ 1b0ee1e3”; 到bigInt,理想情况下,我想将hexStr转换为其十进制形式的bigint, 我可以将字符串转换为不带问题的bigInt,但是当字符串包含十六进制值时,我会遇到问题 问题答案: 你有没有尝试过: 例如: