【发布时间】:2015-05-29 22:45:56
【问题描述】:
我正在使用带有 u8glib 库的 Arduino Pro Mini 和 OLED 显示器 .96"。所以我必须使用此代码来输出乌克兰语单词“Тест”。
String str = "\xc2\xd5\xe1\xe2";
u8g.print(str);
它工作正常。但是当我通过蓝牙从 Android 传输相同的字符串时,它会输出 "\xc2\xd5\xe1\xe2" :(
while (BTSerial.available() > 0){
char recieved = BTSerial.read();
inData += recieved;
if (recieved == '\n'){
u8g.print(inData);
}
}
为什么 Arduino 没有“看到”来自 Android 的转义字符 \x?我尝试读取 2 个字符并执行以下操作:
inData += "\x" + char1 + char2;
但有错误:\x used with no following hex
安卓代码
String str = "Тест";
String result = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int code = (int)c;
if (code >= 1025){
code -= 864;
result += "\\x" + Integer.toHexString(code);
}else {
result += c;
}
}
byte[] msgBuffer = result.getBytes();
String b = "\n";
byte[] n = b.getBytes();
try {
mmOutStream.write(msgBuffer);
mmOutStream.write(n);
}catch (IOException e){
e.printStackTrace();
}
【问题讨论】:
-
乌克兰字符是 2 个字节吗?
-
C 中的“char”是一个字节,我认为它也是 Java 中的。如果是这种情况,那么“代码”永远不会大于 1025,因为一个字节不能大于 255。
-
@Les 乌克兰字母表以 1040 开头,在 1028 (Є)、1025 (Ё) 上有一些字母。我将结果变量打印到控制台,它包含“\xc2\xd5\xe1\xe2”
-
好的,取出转换,发送带有换行符的原始字符串。收到多少字符? (在循环中放置一个计数器,因为如果您收到一个 null 并将其附加到字符串中,它什么也不做)
-
您的 Adruino 代码是 C++ 吗? inData的数据类型是什么?
标签: c arduino arduino-ide