当前位置: 首页 > news >正文

Qt5.12实战之QByteArray与字符指针及字符串转换

示例源码:

#include <QCoreApplication>
#include <QDebug>
#include <QTextStream>
static QTextStream cout (stdout,QIODevice::WriteOnly);
#include <iostream>
#include <QtGlobal>
#include <QByteArray>void test()
{qDebug() << "HelloWorld-qdebug";cout << "Helloword-QTextStream" <<endl;std::cout<<"Helloword-std::cout"<<std::endl;
}void test_types()
{qint8 signed_char_type;//signed char 有符号8bitqint16 signed_short_type;//signed short 有符号16bitqint32 signed_int_type;//signed int 有符号32bitqint64 signed_long_long_int_type;//signed long long int 有符号64bitqDebug() <<"sizeof(qint8)="  <<sizeof (signed_char_type)<<"sizeof(qint16)=" <<sizeof (signed_short_type)<<"sizeof(qint32)=" <<sizeof(signed_int_type)<<"sizeof(qint64)=" <<sizeof (signed_long_long_int_type)<<endl;;qptrdiff qint32_or_qint64_type;//32位系统 qint32 64位系统 qint64qreal double_or_float_type;//默认是double,如果加上-qreal float选项,那么是floatqintptr same_as_qptrdiff;//32位系统 qint32 64位系统 qint64quintptr quint32_or_quint64_type;//32位系统 quint32 64位系统 quint64qDebug() <<"sizeof(qptrdiff)="  <<sizeof (qint32_or_qint64_type)<<"sizeof(qreal)=" <<sizeof (double_or_float_type)<<"sizeof(qintptr)=" <<sizeof(same_as_qptrdiff)<<"sizeof(quintptr)=" <<sizeof (quint32_or_quint64_type)<<endl;quint8 unsigned_char_type;//unsigned char 无符号8bitquint16 unsigned_short_type;//unsigned short 无符号16bitquint32 unsigned_int_type;//unsigned int 无符号32bitquint64 unsigned_long_long_int_type;//unsigned long long int 无符号64bitqDebug() <<"sizeof(quint8)="  <<sizeof (unsigned_char_type)<<"sizeof(quint16)=" <<sizeof (unsigned_short_type)<<"sizeof(quint32)=" <<sizeof(unsigned_int_type)<<"sizeof(quint64)=" <<sizeof (unsigned_long_long_int_type)<<endl;qlonglong same_as_qint64_type;//相当于qint64qulonglong same_as_quint64_type;//相当于quint64qDebug() <<"sizeof(qlonglong)="  <<sizeof (same_as_qint64_type)<<"sizeof(qulonglong)=" <<sizeof (same_as_quint64_type)<<endl;uchar unsigned_char_type_same_quint8;//unsigned char 无符号8bitushort unsigned_short_type_same_quint16;//unsigned short 无符号16bituint unsigned_int_type_same_quint32;//unsigned int 无符号32bitulong unsigned_long_type;//unsigned long 无符号32bitqDebug() <<"sizeof(uchar)="  <<sizeof (unsigned_char_type_same_quint8)<<"sizeof(ushort)=" <<sizeof (unsigned_short_type_same_quint16)<<"sizeof(uint)=" <<sizeof(unsigned_int_type_same_quint32)<<"sizeof(ulong)=" <<sizeof (unsigned_long_type)<<endl;}void test_qbytearray()
{QByteArray bArray("Hello QByteArray"); // '\0'int len = bArray.length();char cLast = bArray[17];qDebug()<<"string len:"<<len<<"last char:"<<cLast<<endl;
}void test_qbytearray_resize()
{QByteArray ba;ba.resize(3);ba[0]=0x3c;ba[1]=0xb8;ba[2]=0x64;qDebug()<<endl<<"ba length:"<<ba.length()<<endl;
}void test_qbytearray_fill()
{QByteArray ba("hello");qDebug()<<"ba before fill:"<<ba<<endl;ba.fill('K');qDebug()<<"ba after fill:"<<ba<<endl;ba.fill('K',2);qDebug()<<"ba after fill two char:"<<ba<<endl;ba.fill('Q',10);qDebug()<<"ba after fill ten char Q:"<<ba<<"qbytearray length:"<<ba.length()<<"sizeof(ba)="<<sizeof (ba)<<endl //ba is a point of QByteArray<<"sizeof(QByteArray[])="<<sizeof ( (char)ba[1])<<endl;ba.data()[7]='A';qDebug()<<ba.at(4)<<ba.data()[5]<<ba.constData()[7]<<endl;
}void test_qbytearray_right_left_mid()
{QByteArray ba("HelloWorld2023");qDebug()<<ba.left(5);qDebug()<<ba.right(4);qDebug()<<ba.mid(5,5);
}void test_qbytearray_size()
{QByteArray ba("HelloWorld");qDebug()<<ba.length();qDebug()<<ba.size();qDebug()<<ba.count();QByteArray ba1("He\0llo");qDebug()<<ba1.length();
}void test_datatype_convert()
{QByteArray ba("HelloWorld");QByteArray ba_hex =  ba.toHex();qDebug() << "HelloWorld to Hex: "<<ba_hex<<endl; //48656c6c6f576f726c64QByteArray ba_fromhex = QByteArray::fromHex("48656c6c6f576f726c64");qDebug() << "QByteArray from Hex: "<<ba_fromhex<<endl;int digit = 255;uint u_digit = 255u;qlonglong qll_digit = 255ll;qulonglong qull_digit = 255ull;qDebug()<<"number base 10 on int :"<< QByteArray::number(digit);qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit);qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit);qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit);qDebug()<<"number base 10 on int :"<< QByteArray::number(78);qDebug()<<"number base 10 on uint :"<<QByteArray::number(78u);qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(78ll);qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(78ull);qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,16);qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,16);qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,16);qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,16);qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,8);qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,8);qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,8);qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,8);qDebug()<<"number base 10 on int :"<< QByteArray::number(digit,2);qDebug()<<"number base 10 on uint :"<<QByteArray::number(u_digit,2);qDebug()<<"number base 10 on qlonglong :"<<QByteArray::number(qll_digit,2);qDebug()<<"number base 10 on qulonglong :"<<QByteArray::number(qull_digit,2);QByteArray num;qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit);qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit);qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit);qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit);qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,16);qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,16);qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,16);qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,16);qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,8);qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,8);qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,8);qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,8);qDebug()<<"QByteArray::setNum base 10 on int :"<< num.setNum(digit,2);qDebug()<<"QByteArray::setNum base 10 on uint :"<<num.setNum(u_digit,2);qDebug()<<"QByteArray::setNum base 10 on qlonglong :"<<num.setNum(qll_digit,2);qDebug()<<"QByteArray::setNum base 10 on qulonglong :"<<num.setNum(qull_digit,2);double dbNum=12345.66;qDebug()<<"number base 10 on double of e format(prec=6) :"<< QByteArray::number(dbNum,'e');qDebug()<<"number base 10 on double of e format(prec=3) :"<< QByteArray::number(dbNum,'e',3);qDebug()<<"number base 10 on double of E format(prec=6) :"<< QByteArray::number(dbNum,'E');qDebug()<<"number base 10 on double of e format(prec=3) :"<< QByteArray::number(dbNum,'E',3);qDebug()<<"number base 10 on double of f format(prec=6) :"<< QByteArray::number(dbNum,'f');qDebug()<<"number base 10 on double of f format(prec=3) :"<< QByteArray::number(dbNum,'f',3);qDebug()<<"number base 10 on double of f format(prec=3) :"<< QByteArray::number(dbNum,'f',1);qDebug()<<"number base 10 on double of g format(prec=6) :"<< QByteArray::number(dbNum,'g');qDebug()<<"number base 10 on double of g format(prec=3) :"<< QByteArray::number(dbNum,'g',3);qDebug()<<"number base 10 on double of G format(prec=6) :"<< QByteArray::number(dbNum,'G');qDebug()<<"number base 10 on double of G format(prec=3) :"<< QByteArray::number(dbNum,'G',3);QByteArray abc="HelloWorld";qDebug()<<"HelloWorld ->toLower() : "<<abc.toLower();qDebug()<<"HelloWorld ->toUpper() : "<<abc.toUpper();QByteArray strNum="-123456";QByteArray strNumU="123456";qDebug()<<"strNum ->toInt() : "<<strNum.toInt();qDebug()<<"strNum ->toUInt() : "<<strNumU.toUInt();bool isBase=false;QByteArray strDigit="255";QByteArray strBin="11111111";qDebug()<<"digit ->toInt() base on 10 : "<<strDigit.toInt(&isBase)<<",isBase:"<<isBase;qDebug()<<"digit ->toInt() base on 16 : "<<strDigit.toInt(&isBase,16)<<",isBase:"<<isBase;qDebug()<<"digit ->toInt() base on 8 : "<<strDigit.toInt(&isBase,8)<<",isBase:"<<isBase;qDebug()<<"digit ->toInt() base on 2 : "<<strBin.toInt(&isBase,2)<<",isBase:"<<isBase;QByteArray strDouble="3.14159";qDebug()<<"strDouble ->toDouble() : "<<strDouble.toDouble(&isBase)<<",isBase:"<<isBase;qDebug()<<"strDouble ->toFloat() : "<<strDouble.toFloat(&isBase)<<",isBase:"<<isBase;qDebug()<<QByteArray::number(strDouble.toDouble());qDebug()<<QByteArray::number(strDouble.toDouble(),'g');qDebug()<<QByteArray::number(strDouble.toDouble(),'g',3);qDebug()<<QByteArray::number(strDouble.toDouble(),'G');qDebug()<<QByteArray::number(strDouble.toDouble(),'G',3);qDebug()<<QByteArray::number(strDouble.toDouble(),'f');qDebug()<<QByteArray::number(strDouble.toDouble(),'f',3);qDebug()<<QByteArray::number(strDouble.toDouble(),'e');qDebug()<<QByteArray::number(strDouble.toDouble(),'e',3);qDebug()<<QByteArray::number(strDouble.toDouble(),'E');qDebug()<<QByteArray::number(strDouble.toDouble(),'E',3);
}typedef struct User{int id;std::string name;
}USER;void test_qbytearray_charpoint_std_string_qstring()
{USER u;u.id=1001;u.name="hello";QByteArray arr;arr.append((char*)&u,sizeof (u));USER *pUser = (USER*)arr.data();qDebug() <<pUser->id<<pUser->name.c_str();QByteArray ba("HelloWorld");char *pBa = ba.data();qDebug() << pBa;qDebug() << *pBa;while (*pBa) {qDebug()<< "item of Array : " << *pBa;++pBa;}char *p = &ba.data()[5];qDebug() <<p;std::string str = ba.toStdString();qDebug()<<"std::string ->"<<str.c_str();QByteArray baStd = QByteArray::fromStdString(std::string("this is a std string"));qDebug()<<"fromStdString ->"<<baStd;QString qstr = QString("HelloWorld");qDebug()<<"QString to QByteArray ->"<<qstr.toLatin1();QByteArray tmpBa = "flkdsjlkfjkdsjfldsjkfjk";qstr=tmpBa;qDebug()<<qstr;if(tmpBa.isEmpty()){qDebug()<<"";}if(QByteArray("").isEmpty()){qDebug()<<"";}if(QByteArray().isEmpty()){qDebug()<<"";}}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);test();test_types();test_qbytearray();test_qbytearray_resize();test_qbytearray_fill();test_qbytearray_right_left_mid();test_qbytearray_size();test_datatype_convert();test_qbytearray_charpoint_std_string_qstring();return a.exec();
}

相关文章:

Qt5.12实战之QByteArray与字符指针及字符串转换

示例源码:#include <QCoreApplication> #include <QDebug> #include <QTextStream> static QTextStream cout (stdout,QIODevice::WriteOnly); #include <iostream> #include <QtGlobal> #include <QByteArray>void test() {qDebug() <…...

二、ElasticSearch基础语法

目录一、简单了解ik分词器(分词效果)1.standard(单字分词器&#xff0c;es默认分词器)2.ik_smart分词(粗粒度的拆分)3.ik_max_word分词器&#xff08;最细粒度拆分&#xff09;二、指定默认分词器1.为索引指定默认分词器三、ES操作数据1.概述2.创建索引3.查询索引4.删除索引5.添…...

Yolov8详解与实战

文章目录摘要模型详解C2F模块Losshead部分模型实战训练COCO数据集下载数据集COCO转yolo格式数据集&#xff08;适用V4&#xff0c;V5&#xff0c;V6&#xff0c;V7&#xff0c;V8&#xff09;配置yolov8环境训练测试训练自定义数据集Labelme数据集摘要 YOLOv8 是 ultralytics …...

多线程案例——阻塞队列

目录 一、阻塞队列 1. 生产者消费者模型 &#xff08;1&#xff09;解耦合 &#xff08;2&#xff09;“削峰填谷” 2. 标准库中的阻塞队列 3. 自己实现一个阻塞队列&#xff08;代码&#xff09; 4. 自己实现生产者消费者模型&#xff08;代码&#xff09; 一、阻塞队列…...

学习优秀博文(【国产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP)有感 | 文末赠书5本

学习优秀博文&#xff08;【guo产MCU移植】手把手教你使用RT-Thread制作GD32系列BSP&#xff09;有感 一篇优秀的博文是什么样的&#xff1f;它有什么规律可循吗&#xff1f;优秀的guo产32位单片机处理器是否真的能成功替换掉stm32的垄断地位&#xff1f; 本文博主以亲身经历聊…...

写用例写的焦头烂额?看看摸鱼5年的老点工是怎么写的...

给你个需求&#xff0c;你要怎么转变成最终的用例&#xff1f; 直接把需求文档翻译一下就完事了。 老点工拿到需求后的标准操作&#xff1a; 第一步&#xff1a;解析需求 先解析需求-找出所有需求中的动词&#xff0c;再列出所有测试点。测试点过程不断发散&#xff0c;对于…...

基于深度学习的鸟类检测识别系统(含UI界面,Python代码)

摘要&#xff1a;鸟类识别是深度学习和机器视觉领域的一个热门应用&#xff0c;本文详细介绍基于YOLOv5的鸟类检测识别系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码以及PyQt的UI界面。在界面中可以选择各种鸟类图片、视频以及开启摄像头进行检测识别…...

零基础搭建Tomcat集群(超详细)

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…...

机器学习自学笔记——聚类

聚类的基本概念 聚类&#xff0c;顾名思义&#xff0c;就是将一个数据集中各个样本点聚集成不同的“类”。每个类中的样本点都有某些相似的特征。比如图书馆中&#xff0c;会把成百上千的书分成不同的类别&#xff1a;科普书、漫画书、科幻书等等&#xff0c;方便人们查找。每…...

注意下C语言整形提升

C语言整形提升 C语言整形提升是指在表达式中使用多种类型的数据时&#xff0c;编译器会自动将较小的类型转换为较大的类型&#xff0c;以便进行运算。在C语言中&#xff0c;整型提升规则如下&#xff1a; 如果表达式中存在short类型&#xff0c;则将其自动转换为int类型。 如…...

Go panic的学习

一、前言 我们的应用程序常常会出现异常&#xff0c;包括由运行时检测到的异常或者应用开发者自己抛出的异常。 异常在一些其他语言中&#xff0c;如c、java&#xff0c;被叫做Exception&#xff0c;主要由抛出异常和捕获异常两部分组成。异常在go语言中&#xff0c;叫做pani…...

讲解Linux中samba理论讲解及Linux共享访问

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…...

【C++笔试强训】第三十二天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…...

OpenAI GPT-4震撼发布:多模态大模型

OpenAI GPT-4震撼发布&#xff1a;多模态大模型发布要点GPT4的新功能GPT-4:我能玩梗图GPT4:理解图片GPT4:识别与解析图片内容怎样面对GPT4申请 GPT-4 API前言&#xff1a; &#x1f3e0;个人主页&#xff1a;以山河作礼。 &#x1f4dd;​&#x1f4dd;:本文章是帮助大家更加了…...

手把手教你 在linux上安装kafka

目录 1. 准备服务器 2. 选一台服务器配置kafka安装包 2.1 下载安装包 2.2 解压安装包 2.3 修改配置文件 3. 分发安装包到其他机器 4. 修改每台机器的broker.id 5. 配置环境变量 6. 启停kafka服务 6.1 启动kafak服务 6.2 停止kafka服务 1. 准备服务器 1.买几台云服务…...

Spring Cloud(微服务)学习篇(五)

Spring Cloud(微服务)学习篇(五) 1 nacos配置文件的读取 1.1 访问localhost:8848/index.html并输入账户密码后进入nacos界面并点击配置列表 1.2 点击右侧的号 1.3 点击加号后,进入新建配置界面,并做好如下配置 1.4 往下翻动,点击发布按钮 1.5 发布成功后的界面 1.6 在pom.xml…...

道阻且长,未来可期,从GPT-4窥得通用人工智能时代的冰山一角!

大家这两天是不是又被满屏的ChatGPT相关的文章信息给轰炸得不轻&#xff0c;说实话&#xff0c;我真的对ChatGPT的热度如此经久不衰这个问题非常感兴趣。从去年刚面世时&#xff0c;小范围内造成的行业震荡&#xff0c;到今年二月份铺天盖地得铺舆论造势&#xff0c;引发全民热…...

百度将?百度已!

仿佛一夜之间&#xff0c;创业公司OpenAI旗下的ChatGPT就火遍全球。这是一场十分罕见的科技盛宴。下到普通用户&#xff0c;上到各科技大厂都在讨论ChatGPT的前景&#xff0c;国外的微软、谷歌&#xff0c;国内的百度、腾讯、阿里等等都在布局相关业务。比尔盖茨更是称ChatGPT与…...

内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试

文章目录一、篇头二、QEMU&#xff1a;挂载虚拟分区2.1 创建 sd.ext4.img 虚拟分区2.2 启动 Qemu2.3 手动挂载 sd.ext4.img三、实现一个简单的KO3.1 目录文件3.2 Makefile3.3 编译3.3.1 编译打印3.3.2 生成文件3.4 检查&#xff1a;objdump3.4.1 objdump -dS test\_1.ko3.4.2 o…...

女子举重问题

一、问题的描述 问题及要求 1、搜集各个级别世界女子举重比赛的实际数据。分别建立女子举重比赛总成绩的线性模型、幂函数模型、幂函数改进模型&#xff0c;并最终建立总冠军评选模型。 应用以上模型对最近举行的一届奥运会女子举重比赛总成绩进行排名&#xff0c;并对模型及…...

创业沟通陷阱:从“一切顺利”到“坦诚求助”的工程化实践

1. 项目概述&#xff1a;当“独角兽”闭上嘴&#xff0c;“彩虹”褪了色在科技创业圈混了十几年&#xff0c;从硅谷到深圳&#xff0c;从硬件孵化器到软件路演日&#xff0c;我见过太多这样的场景。你走进一个挤满创业者的房间&#xff0c;空气里弥漫着咖啡因和焦虑混合的独特气…...

Matplotlib保存图片尺寸总不对?搞懂bbox_inches=‘tight‘与figsize的‘相爱相杀’,一篇就够了

Matplotlib保存图片尺寸总不对&#xff1f;搞懂bbox_inchestight与figsize的‘相爱相杀’&#xff0c;一篇就够了 当你精心设计了一个数据可视化图表&#xff0c;设置了完美的figsize(10, 8)和dpi100&#xff0c;期待得到一张1000x800像素的精美图片&#xff0c;却在保存时发现…...

TrollInstallerX终极指南:如何高效部署iOS越狱工具的专业解决方案

TrollInstallerX终极指南&#xff1a;如何高效部署iOS越狱工具的专业解决方案 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 在iOS 14.0到16.6.1系统上安装TrollStore一…...

告别枯燥理论:用51单片机和DAC0832做个迷你音乐合成器,汇编语言实现《小星星》

用51单片机和DAC0832打造迷你音乐合成器&#xff1a;汇编语言实现《小星星》全解析 在嵌入式系统学习的道路上&#xff0c;很多初学者都会遇到一个共同的问题&#xff1a;如何将枯燥的理论知识转化为有趣的实际应用&#xff1f;今天&#xff0c;我们就来打破常规&#xff0c;用…...

Cursor AI助手Pro功能破解技术深度解析:三重防护机制与实战指南

Cursor AI助手Pro功能破解技术深度解析&#xff1a;三重防护机制与实战指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached…...

D3KeyHelper:5个技巧让暗黑破坏神3操作效率翻倍的智能宏工具完全指南

D3KeyHelper&#xff1a;5个技巧让暗黑破坏神3操作效率翻倍的智能宏工具完全指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否曾在《暗黑破…...

企业如何通过Taotoken实现API Key的统一管理与审计

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业如何通过Taotoken实现API Key的统一管理与审计 在将大模型能力集成到企业业务流程的过程中&#xff0c;一个常见的挑战是如何安…...

蓝桥杯嵌入式备赛:手把手教你用STM32G4的ADC读取光敏电阻(国信长天扩展板)

蓝桥杯嵌入式竞赛实战&#xff1a;STM32G4光敏电阻精准采集与优化策略 在蓝桥杯嵌入式竞赛中&#xff0c;环境光检测是高频考点之一。国信长天扩展板上的光敏电阻模块看似简单&#xff0c;但要在竞赛中稳定发挥&#xff0c;需要深入理解硬件电路设计原理、掌握ADC采集的优化技巧…...

别再IO模拟SPI了!STM32F103驱动AD9833信号发生器,库函数SPI配置避坑全记录

STM32硬件SPI驱动AD9833信号发生器的深度避坑指南 在嵌入式开发中&#xff0c;SPI通信是最常用的外设接口之一。许多开发者习惯使用GPIO模拟SPI时序&#xff0c;认为这样更灵活可控。但当我们面对AD9833这类对时序要求严格的芯片时&#xff0c;IO模拟的弊端就会暴露无遗——信号…...

从零构建:基于Air724UG的4G LTE物联网数据透传系统

1. 认识Air724UG模块&#xff1a;你的物联网数据搬运工 第一次拿到Air724UG这个巴掌大的4G模块时&#xff0c;我完全没想到它能成为我物联网项目的核心组件。这个来自合宙通信的Cat.1模块&#xff0c;最大的特点就是用2G的价格享受4G的体验。实测在市区环境下&#xff0c;它的上…...