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

news2024/12/23 5:47:27

简单了解编码:
​ 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的转换了  我的理解是一般就是我们理解的ASCII
    data_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-32
    unsigned int ucs4[] = {0x0048, 0x0065, 0x006c, 0x006c, 0x006f,
                           0x002c, 0x0020, 0x4e16, 0x754c}; // "Hello, 世界" in UCS-4
    ui->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)));
    //字符串比较 localeAwareCompare

    qstrFunc();
}

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  vasprintf
    QString 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.coloradmin.cn/o/1408403.html

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

相关文章

Zabbix 整合 Prometheus:案例分享与操作指南

一、简介 Zabbix 和 Prometheus 都是流行的开源监控工具&#xff0c;它们各自具有独特的优势。Zabbix 主要用于网络和系统监控&#xff0c;而 Prometheus 则专注于开源的分布式时间序列数据库。在某些场景下&#xff0c;将这两个工具整合在一起可以更好地发挥它们的优势&#…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界&#xff1f;探索多模态模型种视觉编码器的缺陷。 论文中指出&#xff0c;上面这些VQA问题&#xff0c;人类可以瞬间给出正确的答案&#xff0c;但是多模态给出的结果却是错误的。是哪个环节出了问题呢&#xff1f;视觉编码器的问题&#xff1f;大语言模型出现了幻觉&…

redis集群 —— 高性能

文章目录 前言节点1.1 启动节点 槽指派2.1 记录节点的槽指派信息2.2 传播节点的槽指派信息2.3 记录集群所有槽的指派信息 在集群中执行命令3.1 计算键属于哪个槽3.3 节点数据库的实现 重新分片复制与故障转移 前言 Redis集群是Redis提供的分布式数据库方案&#xff0c;集群通过…

vp9协议笔记

vp9协议笔记&#x1f4d2; 本文主要是对vp9协议的梳理&#xff0c;协议的细节参考官方文档&#xff1a;VP9协议链接&#xff08;需要加速器&#xff09; vp9协议笔记 vp9协议笔记&#x1f4d2;1. 视频编码概述2. 超级帧superframe&#xff08;sz&#xff09;&#xff1a;2. fr…

ZK高可用架构涉及常用功能整理

ZK高可用架构涉及常用功能整理 1. zk的高可用系统架构和相关组件1.1 Quorum机制1.2 ZAB协议 2. zk的核心参数2.1 常规配置2.2 特殊优化配置 3. zk常用命令3.1 常用基础命令3.2 常用运维命令 4. 事务性4.1 数据写流程4.2 数据读流程 5. 疑问和思考5.1 zk不擅长处理哪些场景&…

springboot家乡特色推荐系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括家乡特色推荐的网络应用&#xff0c;在外国家乡特色推荐系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&#xff0…

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系&#xff0c;这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的&#xff0c;Mybatis中存在两级缓存。分别是一级缓存(会话级)&#xff0c;和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上&#xff08;g0/0/1&#xff09;的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上&#xff08;e0/0/1&#xff09;打标记 则在pc1上ping pc3可通&#xff08;实现互通&am…

阿里云Serverless 容器使用,以及常见问题处理

阿里云Serverless Kubernetes容器服务&#xff08;ASK&#xff09;是基于Kubernetes的Serverless容器产品&#xff0c;能够自动完成资源管理、弹性伸缩和按需计费。以下是一些基本使用步骤以及常见问题处理&#xff1a; 阿里云Serverless Kubernetes&#xff08;ASK&#xff0…

17.鸿蒙HarmonyOS App(JAVA)滑动选择器

每天进步一点点,成功在久不在速 滑动选择器 //设置文本样式 picker.setNormalTextFont(Font.DEFAULT_BOLD); picker.setNormalTextSize(40); picker.setNormalTextColor(new Color(Color.getIntColor("#FFA500"))); picker.setSelectedTextFont(Font.DEFAULT_BOLD)…

socket通信客户端收到16进制转换出现efbfbd乱码解决办法

socket客户端接收服务端发来的数据时&#xff0c;发现老有efbfbd乱码&#xff0c;如下图&#xff0c;服务端发送的是02040200013CF0&#xff0c;但是客户端接收到解析后却不一样 客户端接收解析并打印 在网上查原因后&#xff0c;原因是将接收的byte数组转换为String后&#…

C++:第十三讲BFS广度优先搜索

前言 今天带领大家学一下BFS。 DFS可以看——C:第十二讲DFS深搜&#xff08;二&#xff09;_c匿名函数dfs-CSDN博客 BFS简介 广度优先搜索&#xff08;breadth-first search&#xff0c;缩写为bfs&#xff09;又名宽度优先搜索&#xff0c;是最简便的图的搜索算法之一&…

Conda python运行的包和环境管理 入门

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装 Conda 是一个功能强大的命令行工具&#xff0c;用于在 Windows、macOS 和 Linux 上运行的包和环境管理。 本 conda 入门指南介绍了启动和使用 conda 创建环境和安装包的基础知识。 1. 准备…

优先级队列(堆) PriorityQueue

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.优先级队列 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的创建 2.3 堆的插入和删除 2.…

基于openssl v3搭建ssl安全加固的c++ tcpserver

1 概述 tcp server和tcp client同时使用openssl库&#xff0c;可对通信双方流通的字节序列进行加解密&#xff0c;保障通信的安全。本文以c编写的tcp server和tcp client为例子&#xff0c;openssl的版本为v3。 2 安装openssl v3 2.1 安装 perl-IPC-Cmd openssl项目中的co…

【软考】位示图

目录 一、基本概念二、位示图 一、基本概念 1.要将文件保存到外部存储器&#xff08;外存或辅存&#xff09;&#xff0c;首先得知道存储空间的使用情况 2.要清楚哪个物理块已经被占用&#xff0c;哪个物理块是空闲的 3.当对大容量的磁盘存储空间被多用户共享时&#xff0c;用户…

套接字通信(附带单线程TCP套接字通信代码)

套接字-Socket 1. 概念 1.1 局域网和广域网 局域网&#xff08;LAN&#xff09;和广域网&#xff08;WAN&#xff09;是两种不同范围的计算机网络&#xff0c;它们用于连接多台计算机以实现数据共享和通信。 局域网&#xff08;LAN&#xff09;&#xff1a; 定义&#xff1…

JUC-CAS

1. CAS概述 CAS(Compare ans swap/set) 比较并交换&#xff0c;实现并发的一种底层技术。它将预期的值和内存中的值比较&#xff0c;如果相同&#xff0c;就更新内存中的值。如果不匹配&#xff0c;一直重试&#xff08;自旋&#xff09;。Java.util.concurrent.atomic包下的原…

AMIS的组件学习使用

部分代码片段 {"id": "filterForm","className": " xysd-zbkb-pubquery","labelWidth": 130,"body": [{"type": "grid","className": "xysd-grid-query-input","c…