qt初入门6:QChar和QString相关接口练习

简单了解编码:
​ latin1(ISO 8859-1)字符集是对ASCII基本字符集的扩展,都是1字节编码。
Unicode编码有多重存储方案,utf-8使用1~4字节编码,最少1字节;utf-16使用2-4字节编码,最少2字节。

主要练习Qchar,QString,Qstring和数值的转换,以及资源文件的加载和显示居中处理。

QChar主要练习一下unicode编码,和ASCII字符串编码c字符的转换。

QString字符串主要练习不同编码形式的初始化,除了静态直接初始化,也有对应成员初始化,以及常用的成员函数。

加载资源文件,spinbox控件练习,文本控制居中练习。

1:QChar练习

1.1 主要关注QChar的字符编码,初始化,以及和正常字符的转换。

//简单整理Qchar相关知识 QChar占两个字节,主要表示unicode字符,需要知道ascii,ISO-8859-1 (Latin1) 和uncode字符之间的转换
//其他的QChar相关静态函数和成员函数都是基础使用 比较,判空白字符,转大小写,数字字母等
void Widget::on_pbn_qchar_clicked()
{//首先是基础的QChar的用法练习,初始化可以参考构造函数//QChar类表示一个Unicode字符, 即可以存汉字, 占用字节大小也可以QString str = "hello, 北京";
//    QChar dst0('青'); //高版本的应该可以这样初始化QString dst = "青岛";QChar dst0 = dst[0];QChar dst1 = dst[1].unicode(); //可以直接用对应的unicode初始化 比如dst[1].unicode()ui->pte_Display->setPlainText(dst +QString::asprintf("\t对应的Unicode编码 = 0x%X  0x%X。", dst0.unicode(), dst1.unicode()));//验证Qchar占用两个字节,但是实际上转成unicode字符,汉字才是两个字节for(short int i=0; i<str.size(); i++){QChar ch = str.at(i);char16_t unicode = ch.unicode();  //获取QChar字符的UTF-16编码值ui->pte_Display->appendPlainText(QString(ch)+"\t大小:"+QString::number(sizeof (ch))+QString::asprintf("\tunicode编码:0x%X",unicode));}//QChar使用utf-16处理字符,可以标识unicode字符,练习字符之间的转换QChar chP = QChar::fromLatin1('P'); //Latin1:ISO-8859-1 8位扩展的ASCII
//    QChar chTest = QChar::fromUcs2(0x5C9B);   //'岛' qt6的版本可用?ui->pte_Display->appendPlainText("QChar \""+QString(chP)+"\"转成ASCII字符:"+QChar(chP.toLatin1()));
}

1.2:demo运行结果

在这里插入图片描述

2:QString联系

2.1 :QString的不同初始化

void Widget::on_pbn_qstring_clicked()
{//涉及不同的编码,所以这里简单了解一下QString不同编码的初始化方式,然后都有对应的转换方法QString str = "";//fromCFString 没了解过CFStringRef 不考虑//fromLocal8Bit 是本地Gb字符集转unicode   QString默认是Unicode//主要用于外部传入的文件  字符数组 这里一般提前知道对应字符的编码方式QString src_str = "你好";QByteArray data_qbytearr = src_str.toLocal8Bit();QString str_qbytearr = QString::fromLocal8Bit(data_qbytearr);QString str_char = QString::fromLocal8Bit(data_qbytearr.data(), data_qbytearr.size());ui->pte_Display->setPlainText("fromLocal8Bit QByteArray转qstring:"+str_qbytearr);ui->pte_Display->appendPlainText("fromLocal8Bit str_char转qstring:"+str_char);QString src_str1 = "你好";char data_char[20] = {0}; //这里本来想直接用char* 发现有异常memcpy(data_char, src_str1.toLocal8Bit().data(), strlen(src_str1.toLocal8Bit().data()));str_char = QString::fromLocal8Bit(data_char, strlen(data_char));ui->pte_Display->appendPlainText("fromLocal8Bit str_char转qstring:"+str_char);//fromLatin1 主要就是字符到QString的转换了  我的理解是一般就是我们理解的ASCIIdata_qbytearr.clear();data_qbytearr.push_back("hello,world;");str_qbytearr = QString::fromLatin1(data_qbytearr); //反转可以用std::string str_std = str_qbytearr.toLatin1().toStdString();ui->pte_Display->appendPlainText("QString转std::string:"+QString(str_std.c_str()));str_char = QString::fromLatin1(data_qbytearr.data(),data_qbytearr.size());ui->pte_Display->appendPlainText("fromLatin1 QByteArray转qstring:"+str_qbytearr);ui->pte_Display->appendPlainText("fromLatin1 str_char转qstring:"+str_char);//fromNSString 是其他平台上的接口//fromRawData 这个用法感觉用不到  参考手册demo了static QChar std_unicode[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x9752, 0x5c9b};//Hello,青岛int size = sizeof(std_unicode) / sizeof(QChar);QString qstr_dst = QString::fromRawData(std_unicode, size);ui->pte_Display->appendPlainText("fromRawData QChar*转qstring:"+qstr_dst +"size:"+QString::number(size));//打印地址的练习qDebug()<<"addr :"<<qPrintable(qstr_dst); //qPrintable 将QString转换成char*字符串而已qDebug("Address of QChar array: %p", qstr_dst.data());qDebug("Address of QChar array: %p", reinterpret_cast<void*>(std_unicode));std_unicode[0] = 0x9752;//如果修改了Qchar中的值  QString中并未改变ui->pte_Display->appendPlainText("fromRawData QChar*转qstring:"+qstr_dst +"size:"+QString::number(size));const char* std_str_test = "test std::string";ui->pte_Display->appendPlainText("fromStdString std::string转qstring:"+QString::fromStdString(std_str_test));std::u16string u16str = u"Hello, 世界";ui->pte_Display->appendPlainText("fromStdU16String std::u16string转qstring:"+QString::fromStdU16String(u16str));std::u32string u32str = U"Hello, 世界";ui->pte_Display->appendPlainText("fromStdU32String std::u32string转qstring:"+QString::fromStdU32String(u32str));std::wstring wstr = L"Hello, 世界";ui->pte_Display->appendPlainText("fromStdWString std::wstring转qstring:"+QString::fromStdWString(wstr));//UTF-32unsigned int ucs4[] = {0x0048, 0x0065, 0x006c, 0x006c, 0x006f,0x002c, 0x0020, 0x4e16, 0x754c}; // "Hello, 世界" in UCS-4ui->pte_Display->appendPlainText("fromUcs4 utf-32转qstring:"+QString::fromUcs4(ucs4, sizeof(ucs4) / sizeof(unsigned int)));const char* utf8char = "\xe4\xbd\xa0\xe5\xa5\xbd";  // UTF-8编码的字符串 你好ui->pte_Display->appendPlainText("fromUtf8 utf-8转qstring:"+QString::fromUtf8(utf8char, strlen(utf8char)));const char16_t * utf16char = u"你好";int u16size = 0;while (utf16char[u16size] != u'\0') {++u16size;}ui->pte_Display->appendPlainText("fromUtf16 utf-16转qstring:"+QString::fromUtf16(utf16char, u16size));wchar_t* wideStr = L"Hello, 你好!"; // 宽字符字符串
//    QString dst111;
//    dst111.toWCharArray(wideStr);  //成员函数也可以ui->pte_Display->appendPlainText("fromWCharArray wchar_t转qstring:"+QString::fromWCharArray(wideStr, wcslen(wideStr)));//字符串比较 localeAwareCompareqstrFunc();
}

2.2:常用接口练习

contains包含,fill填充, push_back,push_front,prepend,insert插入,replace修改,chop删空格,QStringRef只读引用

//简单字符串操作函数整理
void Widget::qstrFunc()
{QString qstr = "hello, world! 主要测试qString的一些常用函数。";QString qstr_st = "hello, world!";QString qstr_ed = "函数。";if(qstr.contains(qstr_st)) //第二个参数大小写敏感或者不敏感,以及其他的重载函数可以研究{ui->pte_Display->appendPlainText(qstr +"中包含字符串:"+qstr_st);}if(!qstr_st.contains(qstr_ed)) //第二个参数大小写敏感或者不敏感,以及其他的重载函数可以研究{ui->pte_Display->appendPlainText(qstr_st +"中不包含字符串:"+qstr_ed);}ui->pte_Display->appendPlainText(qstr_st +"字符串个数:"+QString::number(qstr_st.count()));ui->pte_Display->appendPlainText("endsWith测试:"+ QString((qstr.endsWith(qstr_ed))?"true":"false"));ui->pte_Display->appendPlainText("startsWith测试:"+ QString((qstr.startsWith(qstr_st))?"true":"false"));QString qstr_fill;qstr_fill.fill(QChar('P'), 5);ui->pte_Display->appendPlainText("fill填充测试:"+ qstr_fill);qstr_fill = "PXYZE";ui->pte_Display->appendPlainText(qstr_fill+"字符串front 测试:"+ qstr_fill.front());ui->pte_Display->appendPlainText(qstr_fill+"字符串back 测试:"+ qstr_fill.back());if(qstr_fill.front() == QChar('P')){qstr_fill.remove(0,1);}ui->pte_Display->appendPlainText(qstr_fill+"字符串remove 测试:"+ qstr_fill);qstr_fill.push_back('D');qstr_fill.prepend("prepend");qstr_fill.push_front("F");qstr_fill.insert(0, "Insert"); //简单测试,可以参考对应重载函数qstr_fill.replace(0,3,"res");ui->pte_Display->appendPlainText("字符串插入测试:"+ qstr_fill);ui->pte_Display->appendPlainText(qstr_fill+"字符串indexof(prepend)测试:"+ QString::number(qstr_fill.indexOf("prepend")));ui->pte_Display->appendPlainText(qstr_fill+"字符串lastIndexOf(prepend)测试:"+ QString::number(qstr_fill.lastIndexOf("prepend")));ui->pte_Display->appendPlainText(qstr_fill+"字符串对齐测试:"+ qstr_fill.leftJustified(8, '_'));ui->pte_Display->appendPlainText(qstr_fill+"字符串left截断字符测试:"+ qstr_fill.left(5));ui->pte_Display->appendPlainText(qstr_fill+"字符串right截断测试:"+ qstr_fill.right(5));QString qstr_simplified= "  hello,  my  test!  ";ui->pte_Display->appendPlainText(qstr_simplified+"字符串去除 头尾空格并合并多个空格测试:"+ qstr_simplified.simplified());ui->pte_Display->appendPlainText(qstr_simplified+"长度:"+ QString::number(qstr_simplified.size())+" "+QString::number(qstr_simplified.capacity())+QString::number(qstr_simplified.count()));qstr_simplified.shrink_to_fit(); //压缩空间  在QString中好像没啥用ui->pte_Display->appendPlainText(qstr_simplified+"压缩后长度:"+ QString::number(qstr_simplified.size())+" "+QString::number(qstr_simplified.capacity())+QString::number(qstr_simplified.count()));qstr_simplified = "hello,mytest!";qstr_simplified.chop(2); //移出最后两个字符ui->pte_Display->appendPlainText(qstr_simplified+"字符串chop去除最后两个字符测试:"+ qstr_simplified+"   chopped 测试:"+qstr_simplified.chopped(2) );qstr_simplified.replace(0,3,"DDDD");//从0开始3个字符替换为DDDD  可以参考其他重载函数ui->pte_Display->appendPlainText(qstr_simplified+"字符串 replace测试:"+ qstr_simplified);//left  right  以及引用测试qstr_simplified = "hello,mytest!";ui->pte_Display->appendPlainText(qstr_simplified+"字符串 left测试:"+ qstr_simplified.left(5));ui->pte_Display->appendPlainText(qstr_simplified+"字符串 right测试:"+ qstr_simplified.right(5));QStringRef qstr_ref = qstr_simplified.midRef(3, 4);QStringRef qstr_ref1 =  qstr_simplified.rightRef(5);QStringRef qstr_ref2 =  qstr_simplified.leftRef(5);ui->pte_Display->appendPlainText(qstr_simplified+"字符串 引用测试:"+qstr_ref +" "+ qstr_ref1 +" "+qstr_ref2);//QStringRef 是QString的只读引用   使用时确保源QString不会变qstr_simplified.replace(qstr_simplified.size()-3, 2, "OO");ui->pte_Display->appendPlainText("字符串 引用测试:"+ qstr_simplified + " "+qstr_ref1); //引用也发生 变化了
}

2.3:demo运行结果

在这里插入图片描述

2.4:QString和数值之间的转换

和整数十进制,二进制,十六进制的转换;

和浮点数的转换,以及设置位数。

以及arg成员函数,asprintf,vasprintf

//为测试vasprintf  构造对应的参数 va_list
QString fun(char* msg,...){va_list ap;va_start(ap, msg);QString buf = QString::vasprintf(msg, ap);va_end(ap);return buf;
}
//简单整理QString和数值转换相关知识
void Widget::on_pbn_strnum_clicked()
{QString qstr = QString::asprintf("asprintf 测试:%d %s.", 2, "test");ui->pte_Display->setPlainText("asprintf测试:"+qstr);char fmt[] = "vasprintf 测试:%d %s.";ui->pte_Display->appendPlainText("vasprintf测试:"+fun(fmt, 2,"test"));ui->pte_Display->appendPlainText("arg测试:"+QString("arg 测试 %1 %2 %3").arg(int(1)).arg(ushort(2)).arg(QString("test")));
//    qstr.squeeze();  //QString用不到  释放不用内存qstr = "hello,test!";QString qstr_swap;qstr_swap.swap(qstr);ui->pte_Display->appendPlainText("swap测试: src:"+qstr+" dst:"+qstr_swap);qstr.resize(5, 'A');ui->pte_Display->appendPlainText("resize测试: "+qstr +" size:"+QString::number(qstr.size())+" "+QString::number(qstr.capacity())+" "+QString::number(qstr.length()));qstr.reserve(10);ui->pte_Display->appendPlainText("reserve测试: "+qstr+" size:"+QString::number(qstr.size())+" "+QString::number(qstr.capacity())+" "+QString::number(qstr.length()));ui->pte_Display->appendPlainText("isEmpty测试: "+QString(qstr.isEmpty()?"true":"false"));ui->pte_Display->appendPlainText("isNull测试: "+QString(qstr.isNull()?"true":"false"));ui->pte_Display->appendPlainText("isLower测试: "+QString(qstr.isLower()?"true":"false"));ui->pte_Display->appendPlainText("isUpper测试: "+QString(qstr.isUpper()?"true":"false"));ui->pte_Display->appendPlainText("isRightToLeft测试: "+QString(qstr.isRightToLeft()?"true":"false"));//简单测试一下迭代器遍历QString::const_iterator itr =  qstr.begin();while(itr!=qstr.end()){qDebug()<<"qstr:"<<*itr;++itr;}//字符串和数值的转换  setnum 或者arg   QString::number  asprintf  vasprintfQString qstr_num;int int_num = 0;bool ok = false;qstr_num.setNum(18, 10);ui->pte_Display->appendPlainText("setNum 十进制测试: "+qstr_num);int_num = qstr_num.toInt(&ok);ui->pte_Display->appendPlainText("toInt 十进制测试: "+QString::number(int_num));qstr_num.setNum(18, 2);ui->pte_Display->appendPlainText("setNum 二进制测试: "+qstr_num);int_num = qstr_num.toInt(&ok,2);ui->pte_Display->appendPlainText("toInt 二进制测试: "+QString::number(int_num));qstr_num.setNum(18, 16);ui->pte_Display->appendPlainText("setNum 十六进制测试: "+qstr_num);int_num = qstr_num.toInt(&ok, 16);ui->pte_Display->appendPlainText("toInt 十六进制测试: "+QString::number(int_num));//setnum处理浮点数double  num= 1245.2783;qstr_num.setNum(num,'f',5); //小数点后5位, str= "1245.27830"ui->pte_Display->appendPlainText("setNum 浮点数小数点后5位测试: "+qstr_num);qstr_num.setNum(num,'E',5);ui->pte_Display->appendPlainText("setNum 浮点数小数点后5位测试: "+qstr_num);qstr_num.setNum(num,'g',5);ui->pte_Display->appendPlainText("setNum 整数小数共5位测试: "+qstr_num);qstr_num.setNum(num,'g',3);ui->pte_Display->appendPlainText("setNum 整数小数共3位测试: "+qstr_num);//字符串转数值float float_num = qstr_num.toFloat(&ok);ui->pte_Display->appendPlainText("toFloat 字符串转浮点数测试: "+QString::number(float_num));//其他static QChar std_unicode[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x9752, 0x5c9b};//Hello,青岛int size = sizeof(std_unicode) / sizeof(QChar);qstr_num.setRawData(std_unicode, size);ui->pte_Display->appendPlainText("setRawData 测试: "+qstr_num);qstr_num.setUnicode(qstr.unicode(), qstr.size());ui->pte_Display->appendPlainText("setUnicode 测试: "+qstr_num);const ushort  utf16char[] = {0x0048, 0x0065, 0x006C, 0x006C, 0x006F, 0x0020, 0x0057, 0x006F, 0x0072, 0x006C,0x0064, 0};int u16size = 0;while (utf16char[u16size] != u'\0') {++u16size;}ushort *data1 = const_cast<ushort*>(utf16char);qstr_num.setUtf16(data1, u16size);ui->pte_Display->appendPlainText("setUtf16 测试: "+qstr_num);
}

2.5:demo运行结果(居中显示)

在这里插入图片描述

3:spinbox的练习

3.1:简单练习数值转换:

void Widget::init()
{//这里spinbox相关设置字体 长宽 等各种函数可以探索ui->spinbox_bin->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType); //自适应步长ui->spinbox_bin->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed); //水平扩展,垂直固定ui->spinbox_bin->setRange(0, 65535);ui->spinbox_dec->setRange(0, 65535);ui->spinbox_hex->setRange(0, 65535);ui->spinbox_bin->setDisplayIntegerBase(2);ui->spinbox_dec->setDisplayIntegerBase(10);ui->spinbox_hex->setDisplayIntegerBase(16);ui->spinbox_dec->setValue(10);
}void Widget::on_spinbox_hex_valueChanged(int arg1)
{ui->spinbox_bin->setValue(arg1);ui->spinbox_dec->setValue(arg1);
}

3.2:demo运行结果

在这里插入图片描述

4:处理居左,居中,居右显示

void Widget::on_pbn_left_clicked()
{ui->spinbox_bin->setAlignment(Qt::AlignLeft);//使用时Qt版本比较低  qt6可以用setAlignment吧QTextDocument *doc = ui->pte_Display->document();doc->setDefaultTextOption(QTextOption(Qt::AlignLeft));ui->pte_Display->setDocument(doc);
}void Widget::on_pbn_center_clicked()
{ui->spinbox_bin->setAlignment(Qt::AlignCenter);QTextDocument *doc = ui->pte_Display->document();doc->setDefaultTextOption(QTextOption(Qt::AlignCenter));ui->pte_Display->setDocument(doc);
}void Widget::on_pbn_right_clicked()
{ui->spinbox_bin->setAlignment(Qt::AlignRight);QTextDocument *doc = ui->pte_Display->document();doc->setDefaultTextOption(QTextOption(Qt::AlignRight));ui->pte_Display->setDocument(doc);
}

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

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

相关文章

数据湖技术之发展现状篇

一. 大数据处理架构&#xff1a; 大数据处理架构的发展过程具体可以分为三个主要阶段&#xff1a;批处理架构、混合处理架构&#xff08;Lambda、Kappa架构&#xff09;、湖仓一体。首先是随着Hadoop生态相关技术的大量应用&#xff0c;批处理架构应运而生&#xff0c;借助离线…

中国新能源汽车持续跑出发展“加速度”,比亚迪迎来向上突破

2023年已经过去&#xff0c;对于汽车圈而言&#xff0c;2023年是中国车市的分水岭&#xff0c;在这一年&#xff0c;中国汽车工业70年以来首次进入全球序列&#xff0c;自主品牌强势霸榜&#xff0c;销量首次超过合资车。要知道&#xff0c;这是自大众于1984年进入中国市场成立…

【面试】测试开发面试题

帝王之气&#xff0c;定是你和万里江山&#xff0c;我都护得周全 文章目录 前言1. 网络原理get与post的区别TCP/IP各层是如何传输数据的IP头部包含哪些内容TCP头部为什么有浮动网络层协议1. 路由协议2. 路由信息3. OSPF与RIP的区别Cookie与Session&#xff0c;Token的区别http与…

计算方法实验1:熟悉MATLAB 环境

一、问题描述 熟悉MATLAB 环境。 二、实验目的 了解Matlab 的主要功能&#xff0c;熟悉Matlab 命令窗口及文件管理&#xff0c;Matlab 帮助系统。掌握命令行的输入及编辑&#xff0c;用户目录及搜索路径的配置。了解Matlab 数据的特点&#xff0c;熟悉Matlab 变量的命名规则&a…

MAVEN(1)

分模块开发与设计 分模块开发意义 将原始模块按照功能拆分成若干个子模块&#xff0c;方便模块间相互调用&#xff0c;接口共享 步骤示例 这里以之前开发的SpringMVC_ssm中的domain模块为例 第一步、创建Maven模块 父项改为none&#xff0c;文件存储位置需要做出相应调整 …

Android App开发-简单控件(3)——常用布局

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;CommonLayouts以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线…

浅聊 DNS 和 host

我们先来了解一下访问一个网站的基本流程 我们访问一个网站&#xff0c;自然就是访问网站的服务器&#xff0c;但是访问一个网站的服务器&#xff0c;自然要知道它的地址&#xff0c;服务器的地址就是一串数字&#xff0c;如 也就是我们说的 ip 地址&#xff0c;输入 i…

Redis的数据类型

目录 string 1.编码方式 2.应用场景 3.常用命令 hash 1.编码方式 2.应用场景 3.常用命令 list 1.编码方式 2.应用场景 3.常用命令 set 1.编码方式 2.应用场景 3.常用命令 zset 1.编码方式 2.应用场景 3.常用命令 如何理解Redis的编码方式 embs…

以太网交换基础VLAN原理与配置

目录 7.以太网交换基础 7.1.以太网协议 7.2.以太网帧介绍 7.3.以太网交换机 7.4.同网段数据通信全过程 8.VLAN原理与配置 8.1.VLAN的基本概念 8.2.VLAN的应用 7.以太网交换基础 7.1.以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议…

SpringBoot自定义全局异常处理器

文章目录 一、介绍二、实现1. 定义全局异常处理器2. 自定义异常类 三、使用四、疑问 一、介绍 Springboot框架提供两个注解帮助我们十分方便实现全局异常处理器以及自定义异常。 ControllerAdvice 或 RestControllerAdvice&#xff08;推荐&#xff09;ExceptionHandler 二、…

Python第 1 课 Python 介绍与安装

文章目录 第 1 课 Python 介绍与安装1.Python介绍1.1 面向对象概述1.2 Python 概述1.3 Python 特点 2.查看Python3.pyCharm 安装方法3.1 下载 pyCharm3.2 打开 pyCharm3.3 汉化 pyCharm3.4 pyCharm 的基本介绍和基本使用方法 第 1 课 Python 介绍与安装 1.Python介绍 1.1 面向…

消息中间件之八股面试回答篇:三、RabbitMQ如何解决消息堆积问题(100万条消息堆积)+RabbitMQ高可用性和强一致性机制+回答模板

RabbitMQ中的消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度&#xff0c;就会导致队列中的消息堆积&#xff0c;直到队列存储消息达到上限。之后发送的消息就会成为死信&#xff0c;可能会被丢弃&#xff0c;这就是消息堆积问题。 解决消息堆积有三种种思路…

网络工程师必学知识:2、数据链路层-II型以太帧的封装

1.概述&#xff1a; 针对于链路层&#xff0c;华为官网IP报文格式大全里面包含了很多。如下图&#xff1a; 今天主要分析Ethernet II以太帧。 2.Frame Format&#xff1a; 12Byte&#xff08;inter frame gap&#xff09;|7B(同步码)|1B(定界符)|6B(DMAC)|6B(SMAC)|2B(Type)…

【Demo】基于CharacterController组件的角色控制

项目介绍 项目名称&#xff1a;Demo1 项目版本&#xff1a;1.0 游戏引擎&#xff1a;Unity2020.3.26f1c1 IDE&#xff1a;Visual Studio Code 关键词&#xff1a;Unity3D&#xff0c;CharacterController组件&#xff0c;角色控制&#xff0c;自定义按键&#xff0c;Scrip…

解决PyCharm的Terminal终端conda环境默认为base无法切换的问题

问题描述 在使用PyCharm的Terminal终端时&#xff0c;打开的默认环境为base。 在使用切换命令时&#xff0c;依旧无法解决。 解决方法 1、输入以下命令以查看conda的配置信息&#xff1a; conda config --show2、在输出中找到 auto_activate_base 的行&#xff0c;发现被…

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考&#xff1a;【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09;-CSDN博客 韦东山课程&#xff1a;LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板&#xff1a;野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

uniapp 实现路由拦截,权限或者登录控制

背景&#xff1a; 项目需要判断token&#xff0c;即是否登录&#xff0c;登录之后权限 参考uni-app官方&#xff1a; 为了兼容其他端的跳转权限控制&#xff0c;uni-app并没有用vue router路由&#xff0c;而是内部实现一个类似此功能的钩子&#xff1a;拦截器&#xff0c;由…

数字图像处理(实践篇)三十三 OpenCV-Python从立体图像创建深度图实践

目录 一 方案 二 实践 双眼视觉是指人类使用两只眼睛同时观察同一场景,通过左右眼的视差来感知深度。左眼和右眼的视差是由于它们在空间中的位置不同而产生的,这种差异可以被大脑解读为物体的距离和深度。为了从立体图像构建深度图,找到两个图像之间的视差,可以初始化并创…

Java强训day7(选择题编程题)

选择题 public class Test01{private static int x 100;public static void main(String[] args) {Test01 hs1 new Test01();hs1.x;Test01 hs2 new Test01();hs2.x;hs1new Test01();hs1.x;Test01.x--;System.out.println("x"x);} }public class Test01{private …

倒排索引的构建与查询

倒排索引是信息检索的重要技术&#xff0c;本文将基于中文短信数据&#xff08;数据集可在本文所附资源处下载或点击此处链接下载&#xff09;&#xff0c;编程构建倒排索引并实现布尔查询。 1. 功能设计 用户输入查询&#xff0c;按下回车键&#xff0c;如果该查询作为单独的…