Delphi编程:InputLen属性与MSComm控件

需积分: 19 0 下载量 98 浏览量 更新于2024-08-18 收藏 1.36MB PPT 举报
"Delphi程序设计相关知识" 在Delphi编程中,MSComm控件是一个用于串行通信的重要组件。本文将详细阐述与MSComm控件相关的三个属性:InputLen属性、InputMode属性以及NullDiscard属性。 14.InputLen属性 InputLen属性允许程序员设置和获取用于Input属性读取的字符数。当你使用Input属性从串行端口读取数据时,InputLen决定了读取的字符数量。例如,如果设置`MSComm.InputLen := 10`,那么下一次调用Input属性时,将尝试读取最多10个字符。如果不设定值,则会默认读取缓冲区中的所有数据。 15.InputMode属性 InputMode属性控制Input属性返回的数据类型。它可以设置为不同的值来适应不同类型的串行通信需求。例如,设置`MSComm.InputMode := comInputModeBinary`将使Input属性返回接收到的原始字节流,而`comInputModeText`则会根据换行符分隔文本。选择合适的InputMode可以确保正确解析从串行端口接收到的数据。 16.NullDiscard属性 此属性用于决定如何处理接收到的NULL字符(ASCII码0)。如果`MSComm.NullDiscard := True`,那么NULL字符将不会从端口传输到接收缓冲区,这意味着在读取数据时会忽略NULL字符。反之,如果设置为`False`(默认值),NULL字符会被保留在接收缓冲区中,可用于处理特定的通信协议。 Delphi的基础知识和历史: Delphi是由Borland公司开发的可视化编程环境,自1995年首次发布以来,因其简单、高效和强大的特性而备受开发者喜爱。Delphi的发展经历了多个版本的迭代,每个版本都引入了新的特性和功能: - Delphi 1是基于Windows平台的首款产品,开启了面向对象编程的新时代。 - Delphi 2加强了对32位编程的支持,并引入了数据模块等功能。 - Delphi 3完全支持ActiveX组件,扩展了组件库的使用范围。 - Delphi 4在Object Pascal语言上进行了扩展,虽然稳定性稍差。 - Delphi 5增强了数据库功能,使其更适合企业级应用开发。 - Delphi 6引入了大量的新组件,适应了网络开发的需求。 - Delphi 7在IDE、Web开发、数据库、编译器等多个方面进行了改进,进一步提升了开发效率。 Delphi 7的集成开发环境(IDE)包括7个主要部分,如主窗口、组件面板、工具栏、窗体设计器、代码编辑器、对象观察器和代码浏览器。主窗口由菜单栏、工具栏、标题栏和组件面板组成,其中组件面板包含超过350个组件,是实现可视化编程的关键。用户可以通过多种方式将组件添加到窗体,例如通过拖放或双击组件面板上的按钮。 Delphi提供了一个强大且易用的开发环境,其MSComm控件的属性如InputLen、InputMode和NullDiscard是进行串行通信时不可或缺的工具,而Delphi 7的IDE设计则极大地提升了开发者的生产力。

私钥解密 /** * 私钥解密 * * @param data 待解密数据 * @param key 私钥 * @return byte[] 解密数据 / public static String decryptByPrivateKey(byte[] data, byte[] key) { try { //取得私钥 PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); //生成私钥 PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec); //对数据进行解密 Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); cipher.init(Cipher.DECRYPT_MODE, privateKey); //分段解密 int inputLen = data.length; //开始点 int offSet = 0; ByteArrayOutputStream out = new ByteArrayOutputStream(); while (inputLen - offSet > 0) { if (inputLen - offSet > MAX_DECRYPT_BLOCK) { out.write(cipher.doFinal(data, offSet, MAX_DECRYPT_BLOCK)); } else { out.write(cipher.doFinal(data, offSet, inputLen - offSet)); } offSet = offSet + MAX_DECRYPT_BLOCK; } byte[] decryptedData = out.toByteArray(); out.close(); return new String(decryptedData, "UTF-8"); } catch (Exception e) { log.error("rsaDecrypt error:" + e.getMessage()); } return null; } /* * @param originData * @return / public static String toJsonParam(String originData) { try { return URLDecoder.decode(originData, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); log.error("参数解析失败"); } return null; } /* * 获取私钥 * * @param keyMap 密钥Map * @return String 私钥 / public static String getRSAPrivateKey(Map<String, Object> keyMap) { Key key = (Key) keyMap.get(RSA_PRIVATE_KEY); return Base64Utils.encodeToString(key.getEncoded()); } /* * 获取公钥 * * @param keyMap 密钥Map * @return String 公钥 */ public static String getRSAPublicKey(Map<String, Object> keyMap) { Key key = (Key) keyMap.get(RSA_PUBLIC_KEY); return Base64Utils.encodeToString(key.getEncoded()); } 请你将该段代码改写成Python

2023-06-10 上传