qq_35087814 2022-09-05 20:57 采纳率: 20%
浏览 55
已结题

QList在两个函数中第一个元素值不一样

本人使用一个QList模拟队列存储字符数组,每个字符数组的大小大概在4000-14000,代码如下:
QList<char *> Package_Queue;
下列入队和出队函数中,testchar是我申明的全局变量,一个字符指针,用于测试两个函数中获取到的第一个元素是否相同。
入队函数:

    while(!queuelock->tryLock()){}
    package_head head; //数据包头
    memset(&head,0,sizeof (package_head));
memcpy(&head,package,sizeof (package_head));
Package_Queue.push_back(package);
testchar=*(Package_Queue.begin());
 qDebug()<<"enenqueue crc check"<<head.CRCCode<<crc32_itu(testchar+sizeof (package_head),head.fileSize)<<endl;  //对比生成的CRC校验
qDebug()<<"compare  enqueue char[]"<<strcmp((*Package_Queue.begin() ),(package))<<endl; //对比出队的数据是否相等
emit packageQueue_new();
queuelock->unlock();
};

出队函数:

char* QueueManage::popqueue_Package_Queue(){
    while(!queuelock->tryLock()){}
    if(Package_Queue.isEmpty())
        return nullptr;
    package_head head;
    memset(&head,0,sizeof (package_head));
    char *data;
    data=Package_Queue.takeFirst();
     memcpy(&head,data,sizeof (package_head));
    qDebug()<<"pop queue crc check"<<head.CRCCode<<crc32_itu(data+sizeof (package_head),head.packSize-sizeof (package_head))<<head.fileSize<<endl;;
    qDebug()<<"compare  pop char[]"<<strcmp(testchar,data)<<endl;
    emit PackageQueue_pop();
    queuelock->unlock();
    return data;
};

CRC32校验的代码如下:

uint32_t QueueManage::crc32_itu(char *data, int length){
    uint8_t i;
     uint32_t crc = 0xffffffff;  // Initial value
     while(length--)
       {
        crc ^= *data; data++;
        for (i = 0; i < 8; ++i)
        {
        if (crc & 1)
          crc = (crc >> 1) ^ 0xEDB88320;// 0xEDB88320= reverse 0x04C11DB7
         else
        crc = (crc >> 1);
          }}
     return ~crc;
};

然后运行中出现了如下输出:
enenqueue crc check 698326302 698326302 //入队时,两个crc校验码相同
compare enqueue char[] 0
pop queue crc check 698326302 865988787 //出队函数中,还是原来的char指针,生成的crc校验却不同
compare pop char[] 0
但是比较第一个元素和出队的元素,又是相同的,想请教下是什么情况,怎么解决

  • 写回答

2条回答 默认 最新

  • _GX_ 2022-09-05 21:49
    关注

    入队函数中传给crc32_itu第二个参数是head.fileSize
    出队函数中传给crc32_itu第二个参数是head.packSize-sizeof (package_head)
    你确定这两个数值是一样的吗?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 python中aiohttp.client_exceptions.ContentTypeError
  • ¥30 DeepLung肺结节检测生成最大froc值对应的epoch报错
  • ¥15 信号发生器如何将频率调大,步尽值改成10
  • ¥15 keil 5 编程智能家具,风扇台灯开关,人体感应等
  • ¥100 找一名渗透方面的专家
  • ¥20 使用Matlab APP设计一个插补小程序
  • ¥15 evo评估时曲线出现问题
  • ¥15 eNSP拓扑图配置实验
  • ¥20 有没有兄弟会替换fmod studio的.bank文件内的音效?
  • ¥20 如何解决访问网址被屏蔽的情况