繁体   English   中英

ParseInt处理

[英]ParseInt Processing

有人可以帮助我了解为什么如果我的val值是"0" Integer.parseInt(val)返回我NumberFormatException并且如果我写Integer.parseInt("0")它可以正常工作...

有一种方法可以更轻松地直接使用从Serial读取的int值?

 void draw(){
     i=0;
     byte[] str = new byte[5];

     if ( myPort.available() > 0) 
     {  
        myPort.readBytesUntil(10, inBuffer);
        if(inBuffer==null){
            //...
        }
        else
        {
            while(inBuffer[i]!=13){
                str[i]=inBuffer[i];
                println((int)str[i]);
                i++;
            }
            String val = new String(str);
            i = Integer.parseInt(val);
            println(i);
        }
    }
}

在处理中, port.readBytesUntil(ch, buffer)port读取所有字符,直到遇到等于ch字符。 在Windows中,行分隔符由2个字符(0d,0a)(13,10)

因此,如果您写入序列号"23" ,下一个换行符,下一个"45"等,则buffer将如下所示:

char[] buffer : '2', '3', '0x0d', '0x0a', '4', '5', '0x0d', '0x0a', ...

因此,当您读取readBytesUntil(10, ...)它将读取3个字符: '2', '3', '0x0d'

考虑这样的例子:

char[] c = {'2', '3', 13};
String str = new String(c);
System.out.println(str);                // you will see "23"
System.out.println(str.length());       // lenght will be 3
System.out.println(Integer.parseInt(str.trim()));   // will be OK
System.out.println(Integer.parseInt(str));  // will throw NumberFormatException

因此,请尝试将您的缓冲区转换为String并对该字符串进行trim()

==编辑==


处理为您提供了一些便捷的方法,例如:

 String str = port.readStringUntil(10); str = str.trim(); 

您可以提供一个证明问题的MCVE吗? 使用硬编码的值并使其尽可能简单,例如:

void setup(){
  String val = "0";
  int i = Integer.parseInt(val);
  println(i);
}

尝试解析之前,请打印出val的值。 我敢打赌这不是您认为的价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM