将 String 从 Byte 数组转换为 int
Converting a String from Byte array to int
因为这是我第一次使用 arduino 和 android,所以我整晚都在谷歌搜索这个问题。我的问题是,如何将变量 data
*String 转换为 int?每当我这样做时,我都会收到 NumberFormatException:
int pulse = Integer.ParseInt(data);
我的objective这里是为了能够从arduino获取数据并将其作为整数,以便我能够比较它。
附加:
变量 "data" 是脉率。我需要将它转换为 int,这样我就可以比较脉率是否仍然正常的值。
经过几个小时的搜索,我发现我试图转换为 int 的不是纯粹的字符串,因为它来自 arduino,现在我的问题是如何使变量 "data" 成为整数。
这是我的代码:
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
final int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
final byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable()
{
public void run()
{
Intent i = new Intent(Bluetooth.this, Home.class);
i.putExtra("theBPM",data);
startActivity(i);
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});
workerThread.start();
谢谢。
我们假设问题是 String 到 int,并且您已经进入调试模式或发出一些 Toast 消息表明您正在按预期获得字符串表示形式。
您可以尝试以下选项:
- 您可以检查是否有数据需要解析
- 删除不必要的空格(trim 或 String.split)
- 创建一个辅助方法来检查字符串是否为有效数字
尝试 printing/logging/making toast 看看 data 中有什么。仅当 data 包含数字以外的字符或者您在 data 中有双精度(十进制)值时才会发生这种情况。为此,您可能需要使用 Double.parseDouble(data).
因为这是我第一次使用 arduino 和 android,所以我整晚都在谷歌搜索这个问题。我的问题是,如何将变量 data
*String 转换为 int?每当我这样做时,我都会收到 NumberFormatException:
int pulse = Integer.ParseInt(data);
我的objective这里是为了能够从arduino获取数据并将其作为整数,以便我能够比较它。
附加: 变量 "data" 是脉率。我需要将它转换为 int,这样我就可以比较脉率是否仍然正常的值。 经过几个小时的搜索,我发现我试图转换为 int 的不是纯粹的字符串,因为它来自 arduino,现在我的问题是如何使变量 "data" 成为整数。
这是我的代码:
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
final int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
final byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable()
{
public void run()
{
Intent i = new Intent(Bluetooth.this, Home.class);
i.putExtra("theBPM",data);
startActivity(i);
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});
workerThread.start();
谢谢。
我们假设问题是 String 到 int,并且您已经进入调试模式或发出一些 Toast 消息表明您正在按预期获得字符串表示形式。
您可以尝试以下选项:
- 您可以检查是否有数据需要解析
- 删除不必要的空格(trim 或 String.split)
- 创建一个辅助方法来检查字符串是否为有效数字
尝试 printing/logging/making toast 看看 data 中有什么。仅当 data 包含数字以外的字符或者您在 data 中有双精度(十进制)值时才会发生这种情况。为此,您可能需要使用 Double.parseDouble(data).