diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java index e7c6da0..53b22a7 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -36,4 +36,18 @@ } return array; } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int byteToUnsigned(byte data) { + int temp; + if (data < 0) { + temp = 0xFF & data; + } else { + temp = data; + } + return temp; + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java index e7c6da0..53b22a7 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/ByteUtils.java @@ -36,4 +36,18 @@ } return array; } + + /** + * 将负值byte补位为无符号byte + * C/C++/C#都有无符号数据类型,Java需要补位转换 + */ + public static int byteToUnsigned(byte data) { + int temp; + if (data < 0) { + temp = 0xFF & data; + } else { + temp = data; + } + return temp; + } } diff --git a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java index b773321..31a9256 100644 --- a/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java +++ b/casic-shelter/src/main/java/com/casic/missiles/modular/system/utils/DecodeData.java @@ -44,7 +44,7 @@ */ public static RobotInfo decodeRobotInfo(byte[] bytes) { RobotInfo robot = new RobotInfo(); - robot.setRobotId((int) bytes[4]); + robot.setRobotId(ByteUtils.byteToUnsigned(bytes[4])); robot.setReceiveTime(TimeUtil.getCurrentTime()); byte[] lngBytes = new byte[4]; @@ -56,10 +56,10 @@ robot.setLat(covertLngLat(latBytes)); robot.setNavigateState(covertState(bytes[13])); - robot.setInstrumentV((float) (bytes[14] * 0.1)); - robot.setPowerV((float) bytes[15]); - robot.setInstrumentE((float) (bytes[16])); - robot.setPowerE((float) (bytes[17])); + robot.setInstrumentV((float) (ByteUtils.byteToUnsigned(bytes[14]) * 0.1)); + robot.setPowerV((float) ByteUtils.byteToUnsigned(bytes[15])); + robot.setInstrumentE((float) ByteUtils.byteToUnsigned(bytes[16])); + robot.setPowerE((float) ByteUtils.byteToUnsigned(bytes[17])); byte[] pitchAngleBytes = new byte[2]; System.arraycopy(bytes, 18, pitchAngleBytes, 0, 2); @@ -584,4 +584,6 @@ ) / (Math.pow(2, 31) - 1); return 180 * per; } + + }