我希望通过蓝牙发送任何值,任意i值0-255,但我无法将此值转换为字符串中的char。我尝试了几种不同的方法,但没有成功。
int a= 240 ;
char z=(char)a;
mConnectedThread.write("START"+"\240"+","+"\0240"+","+"\030"+","+Integer.toString(a)+","+z+","+"\0f1"+"STOP");
我得到了这个(左边 - 十进制值,ASCII字符中的右边值):
当我发送\030
时,我会在一个字符中收到24-'\30'
,但我无法发送更大的数字。
所以我的问题是:如何在一个字符串字符中设置/转换0-255范围内的任何值。我不需要显示它,这并不重要。
答案 0 :(得分:0)
<强>被修改强>
如果您只想将字符串写入流而不将其转换为字节,则可以使用BufferedWriter:
OutputStreamWriter osw = new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter = new BufferedWriter(osw);
bufferedWriter.write("some string");
确保您了解api中的flush和close方法: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html
这在java中非常标准,用较高级别的Reader / Writer对象包装低级输入/输出流对象,以便访问更方便的方法。
原始回答
您可以使用特定字符集构造String来解码字节: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#String(byte[], java.nio.charset.Charset)
US-ASCII可能足以满足您的使用需求 http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html
所以你可以像这样构造一个字节数组的字符串:
new String(byteArray, StandardCharsets.US_ASCII);
答案 1 :(得分:0)
我接收并发送byte []数据,并且它运行良好,但我认为makin这个字符串会更好,bocouse当我制作数据表时它看起来像这样
byte[] dat = new byte[50];
dat[i++] = (byte) '!';
dat[i++] = (byte) '!';
dat[i++] = (byte) 0xf0;
dat[i++] = (byte) 0xf0;
dat[i++] = (byte) SET_COUPLING;
dat[i++] = (byte) (coupling + 64*this.name);
dat[i++] = (byte) 0xf0;
dat[i++] = (byte) 0xf0;
dat[i++] = (byte)SET_MULTI;
我只是想找到更好的方法来构造这个命令。 我的发送功能:
void write(String str)
{
if (STATE != CONNECTED)
return;
try
{
mmOutStream.write(str.getBytes());
} catch (IOException e)
{
synchronized (MainActivity.this)
{
btDisconnect();
changeState(CONNECTION_ERROR);
mConnectedThread = null;
}
}
}
或使用byte []的第二个写函数:
void write(byte[] data)
{
if (STATE != CONNECTED)
return;
try
{
mmOutStream.write(data);
} catch (IOException e)
{
handler.post(new Runnable()
{
public void run()
{
btDisconnect();
changeState(CONNECTION_ERROR);
mConnectedThread = null;
}
});
}
}
我看到我使用 mmOutStream.write(str.getBytes()); 将此字符串转换为byte [],但我认为制作字符串命令然后转换int byte []是更优雅的方法。 我认为这是在sprintf中实现这一点的简单方法
sprintf(str,"%4.1f\xdf""C", temp);
其中“\ xdf”在一个字节中只有223,当我把它放入字母数字显示时是度数标记