gpt4 book ai didi

c - Arduino 转义符\x

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:27 26 4
gpt4 key购买 nike

我正在使用带有 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();
}

最佳答案

由 Arduino 初始化为“str”的字符串被转换为实际字符。它实际上并不包含\xc2\xd5\xe1\xe2,它包含字符 c2、d5、e1 和 e2。

在 Android 中,您需要发送相同的“未转义”值。

当你在代码中初始化一个字符串时,比如:

String str = "\xc2\xd5\xe1\xe2";
u8g.print(str);

\x 是一个转义符,告诉编译器接下来的字符将被视为要初始化的字符的十六进制表示。 u8g.print(str) 没有看到转义字符串,它看到了编译器将其转换为的实际 4 个字符(和 null)。

编辑:根据显示 Android 代码的更新,看起来您根本不会发送\x。尝试将 getBytes() 更改为 getBytes("ISO 8859-5"),这是 Cryllic 的代码

Edit2:在 Java 中,char 是一个无符号的 16 位整数,所以我最后的编辑是有缺陷的。

在交易的 Android 端转义字符可能会浪费时间。相反,我认为 BTSerial.read() 的返回值在分配给 char 时被截断了。尝试将“received”的类型更改为“int”。

Here是 Arduino 板上的一个线程,可以帮助您更好地处理 Unicode。

关于c - Arduino 转义符\x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30540187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com