所以我运行了一个java服务器,期待来自我的arduino客户端的数据。我的数据的原始类型是uint8_t,但我想将它作为String。 这就是我进行转换的方式:
String stringData = (char*) data;
其中'data'是uint8_t类型的数组。 我可以打印'stringData'值,它看起来就像我想要的那样,但当它到达我的java服务器时,它会显示为一个盒子里面的一个小问号。有谁知道为什么?
P.S。它在创建普通字符串时工作正常(String stringdata =“123456”)所以我假设它与转换有关。
以下是相关的代码:
Arduino的:
void arduinoClient(String accountID) {
if (client.connect(ip, 9876)) {
client.println(accountID);
Serial.println("Message sent");
} else {
Serial.println("connection failed");
}
}
爪哇:
BufferedReader buff = new BufferedReader(new InputStreamReader (socket.getInputStream()));
String message = buff.readLine();
如果更方便(或可能)这样做,我也可以在java端进行转换
答案 0 :(得分:1)
我认为这个问题与uint8_t真正有关。当您将其转换为char *时,您将其更改为数字的ACII value,而不是表示该数字的实际字符。 This thread explains how to do the conversion.问号是Java试图打印不存在的ASCII值。
答案 1 :(得分:0)
请参阅此代码:
byte buf[31];
String myString = "MD111111111111111111111111111111111#(40)'";
uint8_t data[] = myString.StringToCharArray(buf,30);
通过此代码,我们可以将String转换为uint_8 在你的情况下,你必须这样做:
String stringData = (char*) data;
byte buf[256];
uint_8 result = stringOut.StringToCharArray(buf,256);