【问题标题】:Converting a hex String to an int in Java在 Java 中将十六进制字符串转换为 int
【发布时间】:2019-07-23 19:20:53
【问题描述】:

我正在尝试将十六进制字符串转换为 int,但无论我尝试什么,我都会不断收到 java.lang.NumberFormatException:对于输入字符串:“0xE0030000”。 我在代码中使用以下模式:

    String ecuPattern ="(\\s*)(ECU_ADDRESS )(0xE0\\d*\\w*\\d*)";

    if(mt.find()){
        String stringNumber = mt.group(3);
        long number = Long.parseLong(stringNumber, 16);

你能告诉我我错过了什么吗?提前谢谢!

【问题讨论】:

  • 如果使用Long.parseLong(value, 16),则不需要在数字的十六进制表示开头使用0x
  • @Ivan 是正确的,要解决问题,您只需将正则表达式更改为 "(\\s*)(ECU_ADDRESS )0x(E0\\d*\\w*\\d*)"

标签: java regex hex


【解决方案1】:

您的代码似乎不完整,但根据您的异常消息,Long.parseLong 的输入应该是“E0030000”而不是“0xE0030000”。

public static void main(String[] args){
    String hex="E0030000";  
    Long decimal=Long.parseLong(hex,16);  
    System.out.println(decimal);
}

输出:3758292992

【讨论】:

    【解决方案2】:

    如果您愿意,也可以使用decode() 并留下“0x”。

    String hex="0xE0030000";  
    long decimal=Long.decode(hex);
    

    来自 Javadoc:

    将 String 解码为 Long。接受小数, 十六进制和八进制数由以下给出 语法:

     DecodableString:
        Signopt DecimalNumeral 
        Signopt 0x HexDigits 
        Signopt 0X HexDigits 
        Signopt # HexDigits 
        Signopt 0 OctalDigits
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2021-06-22
      相关资源
      最近更新 更多