diff --git a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart index 656dc238..2d930e9a 100755 --- a/lib/main/lockDetail/lockDetail/lockDetail_logic.dart +++ b/lib/main/lockDetail/lockDetail/lockDetail_logic.dart @@ -371,10 +371,35 @@ class LockDetailLogic extends BaseGetXController { final int userNo = (indexList[1] * 256) + indexList[2]; indexMap['user'] = userNo.toString(); // AppLog.log('userNouserNouserNouserNo:$userNo'); + if (userNo == 0xFFFF) { + // 离线密码情况:16进制格式,去除结束符F(0x1F)及其之后的内容 + final List passwordData = + indexList.sublist(7, 17); // 取10个字节 + // 找到结束符F(0x1F)的位置 + int endIndex = passwordData.indexOf(0x1F); + if (endIndex == -1) { + // 如果没有结束符,取全部数据 + endIndex = passwordData.length; + } + // 只取结束符前的部分(不包括结束符) + final List actualPasswordData = + passwordData.sublist(0, endIndex); + // 转换为十六进制字符串 + String passwordHex = actualPasswordData + .map((byte) => byte.toRadixString(16).padLeft(2, '0')) + .join(); + // 过滤掉字母部分 + passwordHex = passwordHex.replaceAll(RegExp(r'[^0-9]'), ''); + + indexMap['password'] = passwordHex; + // indexMap['password'] = passwordHex; // 存储十六进制字符串表示 + AppLog.log('离线密码开锁:$passwordHex'); + } else { + final List passwordData = indexList.sublist(7, 17); + final String password = utf8String(passwordData); + indexMap['password'] = password.toString(); + } - final List passwordData = indexList.sublist(7, 17); - final String password = utf8String(passwordData); - indexMap['password'] = password.toString(); // AppLog.log('passwordpasswordpassword:$password'); indexMap['success'] = '1';