我有一个嵌入式系统,我必须将我的 Java 应用程序与其集成。到目前为止,我的工作进展顺利,只是现在我遇到了一个问题,我需要将数字 160 作为位发送。 OutputStream 仅接受 byte[],当我尝试将 160(十六进制值 0xA0)插入数组时,它会转换为 -96。我知道 Java 字节仅支持有符号值(-127 到 128),所以我想知道是否有其他人在处理嵌入式系统时遇到类似的问题以及他们的解决方案是什么。
这里是一些示例代码:
OutputStream oStream = mmSocket.getOutputStream();
byte attributeCode = (byte)0xA0;
byte[] buffer = new byte[bufferSize];
buffer[command.length + 1] = attributeCode;
oStream.write(buffer);
嵌入式系统是用 C 语言编写的,已经存在很多年了,所以没有机会改变它。
最佳答案
无论将其视为值为 -96 的有符号字节,还是将其视为值为 160 的无符号字节,该字节都是完全相同的。这不会对另一端的 C 程序产生任何不利影响;唯一的区别是当您尝试在 Java 中打印该值时会发生什么。
换句话说,你没有问题。
关于Java:如何在输出流中传递大于 128 的 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576400/