/// <summary> /// 判断升级文件的合法性 /// </summary> /// <param name="buffer"></param> /// <returns></returns> public static bool JudgeLegitimacyOfUpgradeFile(byte[] buffer) { bool result = false; if (buffer != null && buffer.Length > 0) { //add by masu 2016年3月2日15:33:10 判断下发固件升级文件是否正确 //获取升级文件中魔术数字 int magicWord = ConvertUtility.ConvertToInt32(new byte[] { buffer[3], buffer[2], buffer[1], buffer[0] }, 0); //获取升级的版本号 UpdateVer.u8Main = buffer[4]; UpdateVer.u8Sub = buffer[5]; UpdateVer.u8Rev = buffer[6]; UpdateVer.u8Build = buffer[7]; //获取升级文件中包数大小 UpdateTotalNum = ConvertUtility.ConvertToInt16(new byte[] { buffer[13], buffer[12] }, 0); //获取固件大小 int fwSize = ConvertUtility.ConvertToInt32(new byte[] { buffer[11], buffer[10], buffer[9], buffer[8] }, 0); //获取升级文件中单包数据大小 int singlePacketSize = Convert.ToInt32(buffer[14]); //获取总包个数 int dataTotalCount = (buffer.Length - 19) / singlePacketSize; //获取真实总包数目的余数 int dataTotalCountRemainder = (buffer.Length - 19) % singlePacketSize; if (dataTotalCountRemainder > 0) { dataTotalCount += 1; } if (dataTotalCount == UpdateTotalNum && (buffer.Length - 19) == fwSize) { result = true; } else { result = false; } } return(result); }