在windows 64位上编译Java jar并在RPI 32位上执行

在windows 64位上编译Java jar并在RPI 32位上执行,java,raspberry-pi,Java,Raspberry Pi,当我在Windows1064位机器上以jar文件的形式运行它时,下面的代码可以正常工作,但是当我将jar文件复制到RPI时,它始终会生成错误消息。我从上面的链接尝试了使用JAVAW的建议,但是在RPI上找不到该命令。注意,在RPI上无法正确计算校验和。对如何解决这个问题有什么建议吗 int messageBody[] = new int[(messageLen / 2) - 2]; checkSum = 0; for (int charPtr = 2; charPtr &

当我在Windows1064位机器上以jar文件的形式运行它时,下面的代码可以正常工作,但是当我将jar文件复制到RPI时,它始终会生成错误消息。我从上面的链接尝试了使用JAVAW的建议,但是在RPI上找不到该命令。注意,在RPI上无法正确计算校验和。对如何解决这个问题有什么建议吗

int messageBody[] = new int[(messageLen / 2) - 2];
checkSum = 0;
            for (int charPtr = 2; charPtr < messageLen; ) {
                firstChar = theMessage.charAt(charPtr++);
                secondChar = theMessage.charAt(charPtr++);
                theValue = ((firstChar >= 'A' ? (firstChar - 'A') + 10 : (firstChar - '0')) << 4)
                        | (secondChar >= 'A' ? (secondChar - 'A') + 10 : (secondChar - '0'));

                if (messagePtr < messageBody.length) {
                    checkSum += theValue;
                    messageBody[messagePtr++] = theValue;
                    continue;
                }
                // Compute checksum

                checkSum = (-checkSum & 0xff);
                if (checkSum != theValue) {
                    System.err.println(System.lineSeparator() + "Check sum on received UPB packet failed -- should be " + checkSum + " but received as " + theValue);
                    System.err.println(System.lineSeparator() +"   BAD MESSAGE[" + theMessage + "], " + theMessage.length() + " bytes");
                    return;
                }
            }
int-messageBody[]=新的int[(messageLen/2)-2];
校验和=0;
对于(int charPtr=2;charPtr='A'?(firstChar-'A')+10:(firstChar-'0'))='A'?(secondChar-'A')+10:(secondChar-'0');
if(messagePtr
以32/64位编写的java本机代码不可移植,我们需要在目标环境中重新编译

参考url:

嗨,格罗吉和鲍勃S,
谢谢你的输入。

我唯一想到的是不同的字符串编码

Java是平台无关的。。。我可以在64位Linux上编译,在32位Windows上运行。我搜索过StackOverlow和其他论坛,这似乎是我完全困惑的普遍共识。都是字节码(8位)因此,它在任何平台上运行都不会出现任何问题。查看您看到的错误消息会很有帮助。PA-Feb-2016 18:45:19接收到:PU280501FF7A8600D3接收到的UPB数据包的校验和失败-应为0,但接收为-551D3(0xD3)是实际校验和。它基于添加0x28、0x05、0x01、0xff、0x7A、0x86和0x00,然后进行2的补码,最后将结果截断为8位。从外观上看,您的错误实际上只是程序员强加的,因为不会引发异常。此外,由于您将校验和值与非校验和值进行比较,并且在运行算法的其余部分后,它们看起来不太可能相同,因此看起来您总是会出现此“错误”。此外,如果您希望D3作为您的校验和,但收到-551或0,那么很明显您的校验和算法中有一个错误。您应该告诉我们消息来自何处。Java是可移植的,所以如果JAR文件是相同的,并且输入是相同的,那么结果应该是相同的。在本例中,JAR是相同的,因此差异应该在输入中,正如Grogi指出的……我已经缩小了范围。我从一个串行端口读取一个字符串作为输入,似乎我在读取中得到了两个无关字符,导致messageLen大于正确计算校验和所需的值,IOW,该例程只需要6个十六进制字符串输入即可正确计算校验和,但由于读取了无关的串行端口字符,它接收到8个。因此,搞砸校验和计算必须弄清楚为什么我用RPI而不是Windows 10桌面读取了额外的字符