uint8_t的字符串转换在java中无法识别

时间:2015-04-15 03:48:23

标签: java arduino type-conversion

所以我运行了一个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端进行转换

2 个答案:

答案 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);