字符串通信协议解析函数

unit HUtil32;
//提供大量的辅助函数
{$WARNINGS OFF}
interface

uses
   Classes, SysUtils, WinTypes, WinProcs, Graphics, Messages, Dialogs;

type
   Str4096 = array [0..4096] of AnsiChar;
   Str256 = array [0..256] of AnsiChar;
   //名称、值对照表
   TyNameTable = record
     Name: string;
     varl: Longint;
   end;

TLRect = record
      Left, Top, Right, Bottom: Longint;
   end;
// 取 SearchAfter, ArrestBefore之间的字符串
function  ArrestStringEx (Source, SearchAfter, ArrestBefore: AnsiString; var ArrestStr: AnsiString): AnsiString;
// 获取指定字符串中以指定分割符结尾的子串
function  GetValidStr3 (Str: AnsiString; var Dest: AnsiString; const Divider: array of AnsiChar): AnsiString;

implementation

function ArrestStringEx (Source, SearchAfter, ArrestBefore: AnsiString; var ArrestStr: AnsiString): AnsiString;
var
   SrcLen: integer;
   GoodData: Boolean;
   i, n: integer;
begin
   ArrestStr := ‘‘; {result string}
   if Source = ‘‘ then begin
      Result := ‘‘;
      exit;
   end;

try
      SrcLen := Length (Source);
      GoodData := FALSE;
      if SrcLen >= 2 then
         if Source[1] = SearchAfter then begin
            Source := Copy (Source, 2, SrcLen-1);
            SrcLen := Length (Source);
            GoodData := TRUE;
         end else begin
            n := Pos (SearchAfter, Source);
            if n > 0 then begin
               Source := Copy (Source, n+1, SrcLen-(n));
               SrcLen := Length(Source);
               GoodData := TRUE;
            end;
         end;
      if GoodData then begin
         n := Pos (ArrestBefore, Source);
         if n > 0 then begin
            ArrestStr := Copy (Source, 1, n-1);
            Result := Copy (Source, n+1, SrcLen-n);
         end else begin
            Result := SearchAfter + Source;
         end;
      end else begin
         for i:=1 to SrcLen do begin
            if Source[i] = SearchAfter then begin
               Result := Copy (Source, i, SrcLen-i+1);
               break;
            end;
         end;
      end;
   except
      ArrestStr := ‘‘;
      Result := ‘‘;
   end;
end;

//获取指定字符串中以指定分割符结尾的子串
function GetValidStr3 (Str: AnsiString; var Dest: AnsiString; const Divider: array of AnsiChar): AnsiString;
const
   BUF_SIZE = 20480; //$7FFF;
var
   Buf: array[0..BUF_SIZE] of AnsiChar;
   BufCount, Count, SrcLen, I, ArrCount: Longint;
   Ch: AnsiChar;
label
 CATCH_DIV;
begin
   try
      SrcLen := Length(Str);
      BufCount := 0;
      Count := 1;

if SrcLen >= BUF_SIZE-1 then begin
         Result := ‘‘;
         Dest := ‘‘;
         exit;
      end;

if Str = ‘‘ then begin
         Dest := ‘‘;
         Result := Str;
         exit;
      end;
      ArrCount := sizeof(Divider) div sizeof(AnsiChar);

while TRUE do begin
         if Count <= SrcLen then begin
            Ch := Str[Count];
            for I:=0 to ArrCount- 1 do
               if Ch = Divider[I] then
                  goto CATCH_DIV;
         end;
         if (Count > SrcLen) then begin
            CATCH_DIV:
            if (BufCount > 0) then begin
               if BufCount < BUF_SIZE-1 then begin
                  Buf[BufCount] := #0;
                  Dest := string (Buf);
                  Result := Copy (Str, Count+1, SrcLen-Count);
               end;
               break;
            end else begin
               if (Count > SrcLen) then begin
                  Dest := ‘‘;
                  Result := Copy (Str, Count+2, SrcLen-1);
                  break;
               end;
            end;
         end else begin
            if BufCount < BUF_SIZE-1 then begin
               Buf[BufCount] := Ch;
               Inc (BufCount);
            end;
         end;
         Inc (Count);
      end;
   except
      Dest := ‘‘;
      Result := ‘‘;
   end;
end;

end.

时间: 2024-11-03 21:38:49

字符串通信协议解析函数的相关文章

Qt平台下使用QJson解析和构建JSON字符串

前言 上一篇介绍了C语言写的JSON解析库cJSON的使用:使用cJSON库解析和构建JSON字符串 本篇文章介绍,Qt开发环境下QJson库的使用示例,JSON解析配合API接口,就可以实现一些有趣的工具了,如全国油价查询工具,全国天气查询,空气质量查询,黄历查询,生活指数等等实用工具的开发. 分享几个免费的API提供平台: K780:http://www.k780.com/api 天气API:http://api.help.bj.cn/api/ 心知天气:https://www.senive

javascript与php字符串解析函数

一.javascript: 代码: /* @desc:url解析函数 @author <lee> [<[email protected]>] @param url 要查询的url @return ret 解析后的对象 */ function parseurl(url){ var reg = /(?:([A-Za-z]+):)?(\/{0,3})?(?:(.*):(.*)@)?([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*

通信协议之序列化

原文转自:http://blog.chinaunix.net/uid-27105712-id-3266286.html 通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等.常见的有tcp,udo,http,sip等常见协议.协议有流程规范和编码规范.流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包. 编码规范就是我们通常所说的编解码,序列化.不光是用在通信工作上,在存储工作上我们也经常用到.如我

Redis 通信协议

本文和大家分享的主要是redis 通信协议相关内容,一起来看看吧,希望对大家 学习redis有所帮助. 几乎所有的主流编程语言都有Redis 的客户端,不考虑 Redis 非常流行的原因,如果站在技术的角度看原因还有两个: 1.  客户端与服务端之间的通信协议是在  TCP 协议  之上构建的. 客户端和服务器通过 TCP  连接来进行数据交互, 服务器默认的端口号为  6379  . 客户端和服务器发送的命令或数据一律以  \r\n  (CRLF )结尾. 1. Redis 制定了  RESP

常用的字符串分割方法

起因:前段时间写命令行解析函数(字符串分割比较通用的例子),没有经过深入思考和分析引起了程序死循环,就想了下是否有对应的系统函数可以使用.经过一番搜索之后发现还是有几个可用的字符串分割函数,这里整理下,以作总结及后续查询使用. 当然,如果你觉得自己的字符串处理可以做的很好,可以考虑直接使用字符串查找函数做字符串分割,比如c中的字符串查找函数.CString字符查找函数.string字符查找函数等,更原始点可以直接操作内存. windows下有以下几种可用的字符串分割方法. CString::To

【Oracle连接字符串】【Oracle Net Manager 服务命名配置】【PL/SQL 登陆数据库】

连接数据库的几个重要参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4. 数据库名(db_name): 一.Oracle连接字符串 我们如果要连接db_name这个数据,除了用户名密码以外,还需要输入类似“server_ip:server_port/db_name”这样一个连接字符串. <add key="ConnectionString" value="Da

通用访问 - 用“反射”来设计通用的通信协议

1. 效果演示 2. 通信协议 功能介绍 特点 TCP协议 WebApi协议 3. SDK与工具 4. 应用示例 迷你网管 通用GIS 系统管理 5. 设计初衷与演化 1. 效果演示 服务端代码 //创建服务器 var __服务端 = FT通用访问工厂.创建服务端(); __服务端.端口 = 8888; __服务端.开启(); //实际对象 var __基本状态 = new M基本状态(); __基本状态.版本 = "1.0.0.0"; __基本状态.待处理问题.Add(new M问题

Redis研究(十三)—安全和通信协议

一.安全 Redis的作者Salvatore Sanfilippo曾经发表过Redis宣言,其中提到Redis以简洁为美.同样在安全层面Redis也没有做太多的工作. 1.可信的环境       Redis的安全设计是在“Redis运行在可信环境”这个前提下做出的,在生产环境运行时不能允许外界直接连接到Redis服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证Redis安全的最重要方法. Redis的默认配置会接受来自任何地址发送来的请求,即在任何一个拥有公网IP的服务器上启动Re

1、AJAX里面status的值代表什么 2、get post 的区别 3、怎样把对象转化成字符串 4、闭包、继承、原型、原型链 5 、http传输协议 6、arguments是什么

1.AJAX里面status的值代表什么     在JavaScript里面写AJax的时,最关键的一步是对XMLHttpRequest对象建立监听,即使用"onreadystatechange"方法.监听的时候,要对XMLHttpRequest对象的请求状态进行判断,通常是判断readyState的值为4且status的值为200或者304时执行我们需要的操作.以下记录了一些常用readState以及status的值及其含义 readyState 属性表示Ajax请求的当前状态.它的