uint8_t 的字符串转换在 java 中未被识别

String conversion of uint8_t not being recognized in java

所以我有一个 java 服务器 运行 期待来自我的 arduino 客户端的数据。我的数据的原始类型是 uint8_t,但我希望它是一个字符串。 这就是我进行转换的方式:

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");
  }
}

Java:

BufferedReader buff = new BufferedReader(new InputStreamReader (socket.getInputStream()));       
String message = buff.readLine();

如果更方便(或可能)的话,我也可以在 java 端进行转换

我认为这个问题与 uint8_t 的真实情况有关。当您将其转换为 char* 时,您将其更改为 ACII value of the number, not the actually character that represents the number. This thread explains how to do the conversion. 问号是 Java 试图打印不存在的 ASCII 值。

查看此代码:

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