通过删除Java中的前导零来缩短十六进制数

时间:2019-06-06 12:55:14

标签: java hex

我在字符串中有可用的十六进制数字,我想通过删除前导零来缩短它。我需要用Java来完成

例如:

docker run --cap-add=NET_ADMIN image

当前下面的代码引发NumberFormatException异常

docker network inspect

5 个答案:

答案 0 :(得分:3)

正如其他人所提到的,十六进制字符串不是以0x开头,这仅仅是hexadecimal literals的前缀。

实现您想要的目标的一种可能性是:

QAbstractTableModel

答案 1 :(得分:2)

您没有正确使用$state.go('stateName', { param: "test" } );

应该是:

Long.parseLong

但这将导致

System.out.println(Long.toHexString(Long.parseLong("0000000000000000000000000A000000",16)));

这并不是您想要的。

您必须添加一些其他格式才能获得所需的确切输出:

a000000

现在输出将是:

String shortHex = Long.toHexString(Long.parseLong("0000000000000000000000000A000000",16)).toUpperCase ();
String formatted = (shortHex.length () % 2 == 0 ? "0x":"0x0") + shortHex;
System.out.println (formatted);

如果您输入的内容以“ 0x”开头,则必须在调用0x0A000000 之前修剪该前缀。

答案 2 :(得分:1)

基本思路:

  1. 检查溢出
  2. 仅从原始长字符串中选择最后8个字符,例如0A000000中的0000000000000000000000000A000000
  3. 添加“ 0x”前缀。

答案 3 :(得分:1)

如OP注释中所述,十六进制字符串(如Long.parseLong()所示)不以0x开头。这就是为什么您遇到NumberFormatException。

有多种解决方法。

  1. 如有必要,请删除0x,进行解析,然后将其重新添加

    static String shortenHex(String input){
        if(input.charAt(1)=='x') inputnput = input.substring(2);
        return "0x"+Long.toHexString(Long.parseLong(shortenedInput, 16)).toUpperCase();
    }
    
  2. 添加0x(如果适用),然后使用正则表达式

    static String  shortenHex(String input){
        if(input.charAt(1)!= 'x') input = "0x"+input;
        return input.replaceAll("(?<=0x)0+","");
    }
    

答案 4 :(得分:0)

如果只需要字符串形式而不是文字形式,则应该可以。

      String[] hex = {
            "0000000000000000000000000A000000",
            "0x0000000000000000000000000A000000",
            "000000000000000000000000C0A80000",
            "0x000000000000000000000000C0A80000"
      };

      for (String h : hex) {
         String hmod = h.replaceAll("[0x]*([123456789ABCDEF].*)", "0x$1");
         System.out.println(h + " -> " + hmod);
      }