我正在开发一个通过蓝牙与 PCB 通信的应用程序。我从应用程序发送到 PCB HEX 字符串,如下所示:
hex_string = 2b0509045af2ff1f5230a9072b
好吧,在这个字符串中,这些值总是相同的2b050904
,而其他的则代表5af2ff1f
内存位置、5230a907
变量值和2b
校验和。
2b
开头的 代表,thread init
所以基本上我需要检查2b
字符串中的 other,因为如果有另一个,PCB 会将其理解为另一个线程 init 并将拆分整个字符串。
所以步骤是:
* Disregarding the 2b at the start, check for another 2b inside the string, and if it is,
duplicate it, so the PCB understands it this way.
* Afther duplicating the 2b, change the 09 in the non variable part of the string,
that indicates the string's byte length, with a 0a.
在此线程中讨论后:检查字符串中的特定值
这是我用来实现此目的的功能:
public static String manage2b (String s) {
String sNew = null;
String input = null;
if (s.contains("2b")) {
sNew = s.replaceFirst("2b", "");
}
if (sNew.contains("2b")) {
input = convertString(s);
input = replaceSize(input, "0a");
}
else {
input = s;
}
return input;
}
/**Changes the 09 for 0a as the string's byte length if there is a duplicated "2b"*/
private static String replaceSize (String input, String newSizeVal) {
int sizePosition = 4;
return input.substring(0, sizePosition) + newSizeVal + input.substring(sizePosition + newSizeVal.length(), input.length());
}
/**Duplicates the "2b" if there is another inside the string*/
public static String convertString (String input) {
String find2b = "2B";
int firstIndex = input.indexOf(find2b) + find2b.length();
return input.substring(0, firstIndex) + input.substring(firstIndex, input.length()).replace(find2b, "2B2B");
}
我已经用调试器检查了这个函数,并且使用了一个与示例非常相似的字符串,它使从09
to的更改正确0a
,但它不会复制2b
. 所以,我认为在执行此操作的步骤中,也许我声明了一些错误,或者我在某个地方犯了错误。