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);
所以我有一个 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);