gpt4 book ai didi

Java向USB串口写入字节

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:27 25 4
gpt4 key购买 nike

我有一个代码正在发送到串行 USB 端口...原来可以用,现在不行了!如果发送了错误的字符串,akber() 函数就会终止...

如果我发送 akber("1.0.0.0.1.5") - 它工作完美,

如果我发送 akber("23.0.128.0.0.5") - 它不起作用...

参见下面的代码

    public static byte[] akber(final String input) {
StringTokenizer tokens = new StringTokenizer(input, ".");
int numberOfArrays = tokens.countTokens();
byte[][] byteArrays;
byteArrays = new byte[numberOfArrays][4];
int i = 0;
int space = 0;
while (tokens.hasMoreTokens()) {
int x = Integer.valueOf(tokens.nextToken());
if (x<256) { space++; } else { space+=2; }
byteArrays[i] = BigInteger.valueOf(x).toByteArray();
i++;
}
final byte[] output = new byte[space];
copySmallArraysToBigArray(byteArrays, output);
return output;
}

public static void copySmallArraysToBigArray(final byte[][] smallArrays, final byte[] bigArray) {
int currentOffset = 0;
for (final byte[] currentArray : smallArrays) {
System.arraycopy(currentArray, 0, bigArray, currentOffset, currentArray.length);
currentOffset += currentArray.length;
}
}
<小时/>

从函数调用:

serialPort.writeBytes(akber(data));

我需要它能够处理“数据”字符串中数字的任意组合,因此它将它们转换为正确的字节类型并写入端口...这不是我的代码,我不太理解它,但仍然需要修复它:-)

最佳答案

更改此行:

if (x<256) { space++; } else { space+=2; }  

if (x<128) { space++; } else { space+=2; }  

我运行了你的代码,最初它抛出一个 IndexOutOfBoundsException

akber("1.0.128.0.0.5");

因此请检查您的代码,确保它没有在某处消耗异常,例如

try {
exceptionThrowingMethod();
}
catch(Exception e) {
}

如果 exceptionThrowingMethod 抛出异常,代码将继续执行,就像未抛出异常一样(但 exceptionThrowingMethod 未成功执行!)

关于Java向USB串口写入字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15545196/

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