有人可以帮助我理解为什么如果我的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);
}
}
}
答案 0 :(得分:1)
在处理中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()
转换为此字符串。
==编辑==
<小时/> Processing为您提供了一些方便的方法,例如:
String str = port.readStringUntil(10);
str = str.trim();
答案 1 :(得分:-1)
你能提供证明问题的MCVE吗?使用硬编码值并尽可能简单,如下所示:
void setup(){
String val = "0";
int i = Integer.parseInt(val);
println(i);
}
在尝试解析之前打印出val的值。我敢打赌,这不是你认为的价值。