Linux C++ 海康摄像头获取过车信息

news2024/11/14 14:30:38

代码

void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void *pUser)
{
    printf("enter MessageCallback---------------------->\n");
    int i;
    NET_DVR_ALARMINFO_V30 struAlarmInfo;
    memcpy(&struAlarmInfo, pAlarmInfo, sizeof(NET_DVR_ALARMINFO_V30));
    printf("lCommand is %d, alarm type is %d\n", lCommand, struAlarmInfo.dwAlarmType);
    switch (lCommand)
    {
    case COMM_ITS_PLATE_RESULT:
        // 交通抓拍结果上传(新报警信息类型)
        {
            printf("COMM_ITS_PLATE_RESULT-------->\n");

            NET_ITS_PLATE_RESULT struITSPlateResult;
            memcpy(&struITSPlateResult, pAlarmInfo, sizeof(NET_ITS_PLATE_RESULT));

            printf("号牌VehNo: %s\n", struITSPlateResult.struPlateInfo.sLicense);

            string vehNoStr = struITSPlateResult.struPlateInfo.sLicense;

            cout << "号牌GbkToUtf8:" << GbkToUtf8(vehNoStr) << endl;

            printf("PlateType:%d\n", struITSPlateResult.struPlateInfo.byPlateType);

            printf("IP:%s\n", pAlarmer->sDeviceIP);
            printf("Date:%04d-%02d-%02d %02d:%02d:%02d \n", struITSPlateResult.struSnapFirstPicTime.wYear, struITSPlateResult.struSnapFirstPicTime.byMonth, struITSPlateResult.struSnapFirstPicTime.byDay, struITSPlateResult.struSnapFirstPicTime.byHour, struITSPlateResult.struSnapFirstPicTime.byMinute, struITSPlateResult.struSnapFirstPicTime.bySecond);

            printf("VehType:%d\n", struITSPlateResult.byVehicleType);
        }
        break;
    default:
        break;
    }
}

输出

直接通过

 printf("号牌VehNo: %s\n", struITSPlateResult.struPlateInfo.sLicense);

输出号牌信息,号牌中的汉字是乱码,通过如下GbkToUtf8转换后输出正常。GbkToUtf8相关代码如下:

#include <iostream>
#include <string.h>
#include <iconv.h>

using namespace std;

// 编码转换,source_charset是源编码,to_charset是目标编码
std::string code_convert(char *source_charset, char *to_charset, const std::string &sourceStr) // sourceStr是源编码字符串
{

    iconv_t cd = iconv_open(to_charset, source_charset); // 获取转换句柄,void*类型

    if (cd == 0)

        return "";

    size_t inlen = sourceStr.size();

    size_t outlen = 255;

    char *inbuf = (char *)sourceStr.c_str();

    char outbuf[255]; // 这里实在不知道需要多少个字节,这是个问题

    // char *outbuf = new char[outlen]; 另外outbuf不能在堆上分配内存,否则转换失败,猜测跟iconv函数有关

    memset(outbuf, 0, outlen);

    char *poutbuf = outbuf; // 多加这个转换是为了避免iconv这个函数出现char(*)[255]类型的实参与char**类型的形参不兼容

    if (iconv(cd, &inbuf, &inlen, &poutbuf, &outlen) == -1)

        return "";

    std::string strTemp(outbuf); // 此时的strTemp为转换编码之后的字符串
    iconv_close(cd);

    return strTemp;
}

// gbk转UTF-8
std::string GbkToUtf8(const std::string &strGbk) // 传入的strGbk是GBK编码
{
    return code_convert("gb2312", "utf-8", strGbk);
}

// UTF-8转gbk
std::string Utf8ToGbk(const std::string &strUtf8)
{
    return code_convert("utf-8", "gb2312", strUtf8);
}

// gbk转unicode,"UCS-2LE"代表unicode小端模式
std::string GbkToUnicode(const std::string &strGbk) // 传入的strGbk是GBK编码
{
    return code_convert("gb2312", "UCS-2LE", strGbk);
}

// unicode转gbk
std::string UnicodeToGbk(const std::string &strGbk) // 传入的strGbk是GBK编码
{
    return code_convert("UCS-2LE", "gb2312", strGbk);
}

int main()
{
    string strUnicode = GbkToUnicode("汉字测试"); // 转成unico
    string strUtf8 = GbkToUtf8("汉字测试");       // 转成utf8编码
    return 0;
}

参考:linux下字符编码转换 - 简书 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸

计算原理 确定混凝土梁截面的合理尺寸通常需要考虑弯矩、受力要求和约束条件等多个因素。以下是一种常见的计算公式&#xff0c;用于基于已知弯矩确定混凝土梁截面的合理尺寸&#xff1a; 请注意&#xff0c;以上公式仅提供了一种常见的计算方法&#xff0c;并且具体的规范和设…

长胜证券:A股连续上行 市场信心进一步修复

昨日&#xff0c;A股商场进一步上行&#xff0c;接连第二个交易日上涨&#xff0c;上证指数涨1.20%&#xff0c;站上3100点整数关口&#xff0c;创业板和科创板涨势可观&#xff0c;科创50指数涨幅高达4.12%。 昨日商场呈现更明显的普涨格式&#xff0c;汽车、计算机、电子、传…

[Android AIDL] --- AIDL原理简析

上一篇文章已经讲述了如何在Android studio中搭建基于aidl的cs模型框架&#xff0c;只是用起来了&#xff0c;这次对aidl及cs端如何调用的原理进行简单分析 1 创建AIDL文件 AIDL 文件可以分为两类。 一类是用来定义接口方法&#xff0c;声明要暴露哪些接口给客户端调用&#…

shell常用命令

一、Shell概述 shell是一个命令行解释器&#xff0c;它接受应用程序/用户命令&#xff0c;然后调用操作系统内核。 二、Shell解释器 &#xff08;1&#xff09;Linux提供的Shell解析器有&#xff1a; [roothadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin …

Go的数据结构-数组,字符串,切片底层

字符串本质是一个结构体&#xff0c;str指向底层bye数组&#xff0c;len是bye数组的长度 通过反射包查看 切片就是对数组的引用 创建方式

一个高效的柴油发电机,都需要做什么准备?

柴油发电机的可靠运行对于维持生产流程和设施正常运转至关重要。为了实现这一目标&#xff0c;有效的监控系统变得不可或缺。 通过柴油发电机监控实时监测系统、远程监控技术以及数据分析&#xff0c;能够实现对发电机性能的全面把握&#xff0c;并在出现潜在问题之前采取预防措…

代码随想录算法训练营Day46 | 139.单词拆分 | 多重背包 | 背包问题总结

文章目录 139.单词拆分多重背包背包问题总结初始化遍历顺序 139.单词拆分 题目链接 | 理论基础 乍一看是回溯问题&#xff0c;和分割回文子串很像&#xff0c;不过本题使用回溯解决会超时&#xff08;有些极端 case 过不了&#xff09;&#xff0c;而且这样只需要求解 True/F…

全球选手逐鹿清华!首届AI药物研发算法大赛完美收官

8月26日&#xff0c;首届全球AI药物研发算法大赛决赛答辩暨颁奖典礼&#xff0c;在清华大学生物医学馆举行。来自微软研究院、中国科学院上海药物研究所、上海交通大学等单位的十五支团队&#xff0c;从全球878支团队中脱颖而出&#xff0c;进入了决赛答辩环节。 产教融合&…

演讲与口才艺术教案

演讲与口才艺术教案 第一部分&#xff1a;介绍演讲与口才艺术的重要性 演讲与口才艺术是一种重要的沟通技巧&#xff0c;对于个人和职业发展都具有重要的影响。一个优秀的演讲者和具备良好口才的人&#xff0c;能够有效地表达自己的观点、激发他人的兴趣&#xff0c;并影响他…

React 18 在组件间共享状态

参考文章 在组件间共享状态 有时候&#xff0c;希望两个组件的状态始终同步更改。要实现这一点&#xff0c;可以将相关 state 从这两个组件上移除&#xff0c;并把 state 放到它们的公共父级&#xff0c;再通过 props 将 state 传递给这两个组件。这被称为“状态提升”&#…

记一次坑爹的ARouter::There is no route match the path

接入阿里的ARouter框架&#xff1b;实现最简单的页面跳转&#xff1b;一直失败&#xff0c;报找不到匹配的路径&#xff1b;百度各种基本都说配置有问题&#xff1b;我一一对应&#xff0c;配置怎么看看不出问题来&#xff1b; 我的架构是 接入的代码怎么看都没问题&#xff1…

高并发幂等计数器的设计与实现

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

react css 污染解决方法

上代码 .m-nav-bar {background: #171a21;.content {height: 104px;margin: 0px auto;} }import React from "react"; import styles from ./css.module.scssexport default class NavBar extends React.Component<any, any> {constructor (props: any) {supe…

Linux常用命令——dd命令

在线Linux命令查询工具 dd 复制文件并对原文件的内容进行转换和格式化处理 补充说明 dd命令用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的&#xff0c;对于一些比较底层的问题&#xff0c;使用dd命令往往可以得到出人意料的效果。用的比较多的还是…

[ZenTao]源码阅读:加载自定义任务类型

www/index.php config/config.php framework/base/router.class.php tmp/model/common.php module/common/model.php framework/router.class.php

《动手学深度学习》-55循环神经网络

沐神版《动手学深度学习》学习笔记&#xff0c;记录学习过程&#xff0c;详细的内容请大家购买书籍查阅。 b站视频链接 开源教程链接 循环神经网络 潜变量自回归模型&#xff1a; 循环神经网络结构&#xff1a; 简单来说循环神经网络RNN就是在MLP中加了一项&#xff0c;使它可…

气传导蓝牙耳机哪个好?好用爆款气传导蓝牙耳机推荐

​对于气传导耳机&#xff0c;还有很多朋友觉得还是比较陌生&#xff0c;气传导工作原理是通过空气传播&#xff0c;由耳廓收集声音&#xff0c;然后以声波的形式引起鼓膜振动。气传导耳机除了拥有骨传导耳机优点之外&#xff0c;长时间佩戴没有震麻感&#xff0c;音质比骨传导…

alibabacloud的简单使用,nacos配置中心+服务中心。作者直接给自己写的源码

文章目录 依赖关键主要的程序启动文件配置文件bootstrap.yml依赖文件nacos配置中心上的文件截图 启动成功截图参考文档 依赖关键 SpringBoot版本和com.alibaba.cloud版本需要对应&#xff0c;不然会程序会启动失败作者使用的版本 SpringBoot: 2.1.6.RELEASE alibabacloud: 2.…

Android AGP8.1.0组件化初探

Android AGP8.1.0组件化初探 前言&#xff1a; 前面两篇完成了从AGP4.2到 AGP8.1.0的升级&#xff0c;本文是由于有哥们留言说在AGP8.0中使用ARouter组件化有问题&#xff0c;于是趁休息时间尝试了一下&#xff0c;写了几个demo&#xff0c;发现都没有问题&#xff0c;跳转和传…

循环的技巧和深入条件控制

这里对深入条件控制的知识点做一下测试&#xff1a;用作普通值而不是布尔值时&#xff0c;短路运算符的返回值通常是最后一个求了值的参数。 a2c5 for b in [0,1]:print((a and b and c))运行结果 E:\Python\Python38\python.exe D:/pythonprojects/python-auto-test/test/ti…