[英]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.