c++-帮忙看一下这个DataDeal函数有啥好办法优化吗?

问题描述

帮忙看一下这个DataDeal函数有啥好办法优化吗?
 void DataDeal(char* data, int size)
{
    int32_t index = 0;
    int32_t start = 0;
    int32_t end = 0;

    for(;index <= size;)
    {
        if (!start)
        {
            if (data[index++] == 0x00
                && data[index++] == 0x00
                && data[index++] == 0x00
                && data[index++] == 0x01)
            {
                start = index;
            }
        }

        if (!end)
        {
            if (data[index++] == 0x00
                && data[index++] == 0x00
                && data[index++] == 0x00
                && data[index++] == 0x01)
            {
                end = index -4 ;
            }
        }

        if (start && end)
        {

            int32_t size = end-start;
            char* pp = (char*)&size;
            memcpy(data+start-1, pp, 1);
            memcpy(data+start-2, pp+1, 1);
            memcpy(data+start-3, pp+2, 1);
            memcpy(data+start-4, pp+3, 1);

            start = end+4;
            end = 0;
        }
    }

    end = size;
    int32_t size_s = end-start;
    if (size_s)
    {
        char* pp = (char*)&size_s;
        memcpy(data+start-1, pp, 1);
        memcpy(data+start-2, pp+1, 1);
        memcpy(data+start-3, pp+2, 1);
        memcpy(data+start-4, pp+3, 1);
    }

    return;
}

void main()
{
char data[100]  = {0x00, 0x00, 0x00, 0x01, 0x63, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x63, 0x21, 0x63, 0x21, 0x00, 0x00, 0x00, 0x01, 0x63, 0x21,0x63, 0x21,0x63, 0x21,0x63, 0x21,0x00, 0x00, 0x00, 0x01,0x63, 0x21,0x63, 0x21,0x63, 0x21,0x63, 0x21,0x63, 0x21,0x63, 0x21,0x00, 0x00, 0x00, 0x01, 0x63, 0x21,0x63, 0x21,0x63, 0x21,0x63, 0x21, 0x63, 0x21,0x63,  0x21,0x63, 0x21, 0x00, 0x00, 0x00, 0x01};
    DataDeal(data, 65);
}

DataDeal函数是查找替换掉0x00, 0x00, 0x00, 0x01, 并将其数值修改为两个0x00, 0x00, 0x00, 0x01之间数据长度,并且按照打段顺序排列;
就目前来看 这个函数怎么样优化好些呢?

时间: 2024-10-27 17:21:26

c++-帮忙看一下这个DataDeal函数有啥好办法优化吗?的相关文章

c++-初学C++ 一个小程序 求大神帮忙看下

问题描述 初学C++ 一个小程序 求大神帮忙看下 //分秒显示函数 #include using namespace std; //全局引用std命名空间 void showTime(int ,int); int main() { int hours =0 , mins = 0;//定义且初始化分 和秒 cout << "Input the hour "; cin >> hours; cout << "Input the mins &quo

c语言-求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行

问题描述 求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行 写说明一下代码,代码主要是要在控制台模拟浏览器对tab和网页前进后退的一些操作 再说明一下问题,问题在于brwosertab类和webinformation类的西沟函数,一旦在这两个类的西沟函数里面写上delete 指针名字:整个程序就不能运行了,最关键的是我不太明白为什么程序要调用这两个函数,因为我感觉我都是动态对象啊.最后说明一下,我很菜,只有一点java编程的经验,所以第一次应对c++我真的需要一些帮助.谢谢你们了! 解决方

lua匿名函数问题,和我预期的不太一样,请帮忙看下,谢谢

问题描述 lua匿名函数问题,和我预期的不太一样,请帮忙看下,谢谢 print(function() return 1 end) 我以为会打印1,但是实际打出funciton??? 求解惑,为什么是这样,怎么修改使其打印成1??? 3q 解决方案 print((function() return 1 end)())

C++的dll函数在c#中调用获取不到值,请大家帮忙看下,谢谢!

问题描述 下面的方法是c++写的DLL封装的方法,我要在c#里面引用然后使用:intSTDCALLSDT_ReadBaseMsg(intiPortID,unsignedchar*pucCHMsg,unsignedint*puiCHMsgLen,unsignedchar*pucPHMsg,unsignedint*puiPHMsgLen,intiIfOpen); 我在c#里面是这样写的:///<summary>///读取卡的信息///</summary>///<paramname

c#3-求好心人帮忙看下事件不触发

问题描述 求好心人帮忙看下事件不触发 C.MOUSEDOWN事件怎么都不触发求大神帮忙看下谢谢啊看看谢谢搞了几天--看下看看谢谢搞了几天--看下 解决方案 看下事件有没有挂钩到事件处理函数 解决方案二: 代码都不帖,怎么帮你看? 解决方案三: 你先把代码贴出来啊 ,没有代码 怎么看 解决方案四: 求帮忙----------------------

php我做的登陆页面,账户密码明明没错,但总显示错误,帮忙看一下谢谢!

问题描述 php我做的登陆页面,账户密码明明没错,但总显示错误,帮忙看一下谢谢! $_login=array(); if(isset($_POST['submit'])){ $_login['username']=_check_username($_POST['zh'],2,20); $_login['password']=_check_password($_POST['mm'],6,18); if(_fetch_array("SELECT * FROM userinfor WHERE user

c语言-特殊回文数,大神们帮忙看一看,为什么编译通过而不会运行

问题描述 特殊回文数,大神们帮忙看一看,为什么编译通过而不会运行 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行. 样例输入 52 样例输出 899998 989989 998899 #include int main() { int a,b,c,d,e,f,n,m; scanf("%dn&quo

c++11-请帮忙看下async_accept的这种调用方法,没有使用Bind,看不懂...

问题描述 请帮忙看下async_accept的这种调用方法,没有使用Bind,看不懂... void AsyncAcceptManaged(ManagerAcceptHandler mgrHandler) { _acceptor.async_accept(_socket, [this, mgrHandler](boost::system::error_code error) { if (!error) { try { _socket.non_blocking(true); mgrHandler(

各位帮帮忙看下,为什么writebuffer总往文件里写入第一次读取的内容?

问题描述 本人写了一段代码用byte[8]数组做缓冲读写文件,但总是写入第一次读取的内容(即writebuffer内容总是第一次循环的结果),能否帮帮忙看哪里出问题了?XOR函数和Encode函数返回类型均为byte[8]数组,将Encode函数中temp改成readbuffer后(相当于直接跳过XOR函数),文件写入正常,XOR函数如下:各位帮帮忙,谢谢! 解决方案 解决方案二:不知道你想做什么,思路混乱.解决方案三:通常要这样写intlen=0;while((len=fin.Read(rea