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

QByteArray字节数组

QByteArray字节数组

文章目录

  • QByteArray字节数组
    • 1.1 QByteArray类基本使用说明
    • 1.2 设置数组字节大小
    • 1.3 返回数组大小
    • 1.4 将数据转为其他类型
    • 1.5 将数据转为C语言的字符指针返回
    • 1.6 数组数据追加
    • 1.7 清除数组数据为指定值
    • 1.8 数组数据插入
    • 1.9 删除指定位置指定长度的数据
    • 1.10 替换指定位置的数据
    • 1.11 数组数据查找
    • 1.12 去除空白字符
    • 1.13 QBuffer类介绍
      • 1.13.1QBuffer基本使用介绍
      • 1.13.2 数据读写示例
      • 1.13.3 数据处理一行的数据

1.1 QByteArray类基本使用说明

QByteArray类提供了一个字节数组。

QByteArray可用于存储原始字节(包括’\ 0’)和传统的8位’\ 0’终止字符串。使用QByteArray比使用const char *方便得多。在幕后,它始终确保数据后面跟着’\ 0’终止符,并使用隐式共享(写时复制)来减少内存使用并避免不必要的数据复制。

除了QByteArray之外,Qt还提供了QString类来存储字符串数据。对于大多数目的而言,QString是常用的类。它存储16位Unicode字符,使你可以轻松地在应用程序中存储非ASCII /非拉丁字母字符。此外,QString在整个Qt API中都有使用。QByteArray适用的两种主要情况是何时需要存储原始二进制数据,何时需要对内存进行保存(例如,使用Qt for Embedded Linux)。

初始化QByteArray的一种方法就是将const char *传递给它的构造函数。例如,下面的代码创建一个包含数据“Hello”的大小为5的字节数组:

QByteArray ba("Hello");

尽管size()是5,但字节数组在末尾还保留了一个额外的’\ 0’字符,因此如果使用了一个函数来请求指向底层数据的指针(例如调用data()),则指向的数据保证以’\ 0’结尾。

另一种方法是使用resize()设置数组的大小并初始化每个字节的数据字节。 QByteArray使用基于0的索引,就像C ++数组一样。要访问特定索引位置的字节,可以使用operator 。 在非常量字节数组上,operator 返回可以在赋值左侧使用的字节的引用。 例如:

QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;

对于只读访问,另一种语法是使用at():

for (int i = 0; i < ba.size(); ++i) 
{if (ba.at(i) >= 'a' && ba.at(i) <= 'f')cout << "Found character in range [a-f]" << endl;
}

at()比operator 更快,因为它永远不会导致发生深层复制。

要一次提取多个字节,请使用left(),right()或mid()。

QByteArray可以嵌入’\ 0’字节。Size()函数总是返回整个数组的大小,包括嵌入的’\ 0’字节,但不包括由QByteArray添加的终止’\ 0’。例如:

QByteArray ba1("ca\0r\0t");
ba1.size();                     // Returns 2.
ba1.constData();                // Returns "ca" with terminating \0.QByteArray ba2("ca\0r\0t", 3);
ba2.size();                     // Returns 3.
ba2.constData();                // Returns "ca\0" with terminating \0.QByteArray ba3("ca\0r\0t", 4);
ba3.size();                     // Returns 4.
ba3.constData();                // Returns "ca\0r" with terminating \0.const char cart[] = {'c', 'a', '\0', 'r', '\0', 't'};
QByteArray ba4(QByteArray::fromRawData(cart, 6));
ba4.size();                     // Returns 6.
ba4.constData();                // Returns "ca\0r\0t" without terminating \0.

如果想要获取数据的长度并排除第一个’\ 0’字符,请在字节数组上调用qstrlen()。

调用resize()之后,新分配的字节具有未定义的值。 要将所有字节设置为特定值,请调用fill()。

要获取指向实际字符数据的指针,请调用data()或constData()。 这些函数返回一个指向数据开头的指针。 该指针保证保持有效,直到在QByteArray上调用非const函数为止。除非QByteArray是从原始数据创建的,否则也保证数据以’\ 0’字节结尾。这个’\0’字节由QByteArray自动提供,不计入size()。

QByteArray提供了修改字节数据的以下基本函数:append(),prepend(),insert(),replace()和remove()。

例如:

QByteArray x("and");
x.prepend("rock ");         // x == "rock and"
x.append(" roll");          // x == "rock and roll"
x.replace(5, 3, "&");       // x == "rock & roll"

Replace()和remove()函数的前两个参数是要开始擦除的位置和应该擦除的字节数。

将数据附加到非空数组时,数组将被重新分配并将新数据复制到它。你可以通过调用reserve()来预防分配一定数量的内存,从而避免此行为。你也可以调用capacity()来找出QByteArray实际分配了多少内存。

通常的要求是从字节数组中删除空格字符(‘\ n’,'\ t’等)。如果你想从QByteArray的两端删除空格,使用trimmed()。如果要从两端删除空格并用字节数组中的单个空格字符替换多个连续的空格,请使用simplified()。

如果要查找QByteArray中特定字符或子字符串的所有匹配项,请使用indexOf()或lastIndexOf()。前者从一个给定的索引位置开始搜索,后者向后搜索。如果他们找到它们,它们都会返回字符或子字符串的索引位置;否则,它们返回-1。例如,下面是一个典型的循环,它查找所有出现的特定子字符串:

QByteArray ba("We must be <b>bold</b>, very <b>bold</b>");
int j = 0;
while ((j = ba.indexOf("<b>", j)) != -1){cout << "Found <b> tag at index position " << j << endl;++j;
}

如果你只是想检查QByteArray是否包含特定的字符或子字符串,请使用contains()。如果要查明字节数组中出现特定字符或子字符串的次数,请使用count()。如果要将所有特定值替换为另一个值,请使用两个参数replace()重载之一。

QByteArrays可以使用重载操作符(比如operator <(),operator <=(),operator ==(),operator> =()等进行比较。该比较仅基于字符的数字值。 QString :: localeAwareCompare()是排序用户界面字符串的更好选择。

由于历史原因,QByteArray区分了空字节数组和空字节数组。空字节数组是一个字节数组,它使用QByteArray的默认构造函数或通过将(const char *)0传递给构造函数来初始化。空字节数组是大小为0的任何字节数组。空字节数组始终为空,但空字节数组不一定为空:

QByteArray().isNull();          // returns true
QByteArray().isEmpty();         // returns trueQByteArray("").isNull();        // returns false
QByteArray("").isEmpty();       // returns trueQByteArray("abc").isNull();     // returns false
QByteArray("abc").isEmpty();    // returns false

除了isNull()以外,所有函数都将空字节数组视为空字节数组。例如,data()返回一个指向空字节数组(不是空指针)的’\ 0’字符的指针,并且QByteArray()将等于QByteArray(“”)。建议始终使用isEmpty()并避免使用isNull()。

有关语言环境的注释

数字字符串转换

执行数字数据类型和字符串之间的转换的函数在C语言环境中执行,与用户的区域设置无关。使用QString在数字和字符串之间执行区域识别转换。

8位字符比较

在QByteArray中,大写和小写以及哪个字符大于或小于另一个字符的概念与语言环境有关。这会影响支持不区分大小写选项的函数或比较小写或大写参数的函数。如果两个字符串仅包含ASCII字符,则不区分大小写的操作和比较将是准确的。影响的函数contains(),indexOf(),lastIndexOf(),运算符<(),运算符<=(),运算符>(),运算符> =(),toLower()和toUpper()。

此问题不适用于QStrings,因为它使用Unicode的字符。

另请参阅QString和QBitArray。

1.2 设置数组字节大小

void QByteArray::resize(int size)

示例:

QByteArray All_data;  //创建字符数组All_data.resize(888);   //指定字节大小

1.3 返回数组大小

int QByteArray::length() const
int QByteArray::size() const
int QByteArray::count() const

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear(); //清除字节数组的内容并使其为空。
All_data.append("123456789");
qDebug()<<All_data.size(); //结果: 9
qDebug()<<All_data.length(); //结果:9

1.4 将数据转为其他类型

double QByteArray::toDouble(bool * ok = 0) const
float QByteArray::toFloat(bool * ok = 0) const
QByteArray QByteArray::toHex() const
int QByteArray::toInt(bool * ok = 0, int base = 10) const
long QByteArray::toLong(bool * ok = 0, int base = 10) const
qlonglong QByteArray::toLongLong(bool * ok = 0, int base = 10) const

示例:

 QByteArray string("1234.56");double a = string.toDouble();   // a == 1234.56

1.5 将数据转为C语言的字符指针返回

const char * QByteArray::data() const

1.6 数组数据追加

相关函数:

QByteArray &prepend(char c);
QByteArray &prepend(int count, char c);
QByteArray &prepend(const char *s);
QByteArray &prepend(const char *s, int len);
QByteArray &prepend(const QByteArray &a);
QByteArray &append(char c);
QByteArray &append(int count, char c);
QByteArray &append(const char *s);
QByteArray &append(const char *s, int len);
QByteArray &append(const QByteArray &a);

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear(); //清除字节数组的内容并使其为空。
All_data.append("123");
All_data.append("456");
All_data.append("789");
qDebug()<<All_data;  //结果123456789

1.7 清除数组数据为指定值

QByteArray &fill(char c, int size = -1); //赋值为指定值   
void clear();  //将数组清除为0

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.fill('8');    //将数组整体空间数据赋值为指定数据’8’
qDebug()<<All_data;

1.8 数组数据插入

相关函数:

QByteArray &insert(int i, char c);
QByteArray &insert(int i, int count, char c);
QByteArray &insert(int i, const char *s);
QByteArray &insert(int i, const char *s, int len);
QByteArray &insert(int i, const QByteArray &a);

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear(); //清除字节数组的内容并使其为空。
All_data.append("123");
All_data.append("456");
All_data.append("789");
All_data.insert(2,"abcd");  //从第2个位置插入数据
qDebug()<<All_data;  //结果"12abcd3456789"

1.9 删除指定位置指定长度的数据

QByteArray &remove(int index, int len);

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear(); //清除字节数组的内容并使其为空。
All_data.append("123");
All_data.append("456");
All_data.append("789");
All_data.remove(3,3); //从第3个位置删除3个数据
qDebug()<<All_data;  //结果"123789"

1.10 替换指定位置的数据

相关函数:

QByteArray &replace(int index, int len, const char *s);
QByteArray &replace(int index, int len, const char *s, int alen);
QByteArray &replace(int index, int len, const QByteArray &s);
QByteArray &replace(char before, const char *after);
QByteArray &replace(char before, const QByteArray &after);
QByteArray &replace(const char *before, const char *after);
QByteArray &replace(const char *before, int bsize, const char *after, int asize);
QByteArray &replace(const QByteArray &before, const QByteArray &after);
QByteArray &replace(const QByteArray &before, const char *after);
QByteArray &replace(const char *before, const QByteArray &after);
QByteArray &replace(char before, char after);

示例:

QByteArray All_data;  //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear(); //清除字节数组的内容并使其为空。
All_data.append("123456789");
All_data.replace(3,3,"abc"); //将第3个位置后的3个数据替换为abcqDebug()<<All_data;  //结果"123abc789"

1.11 数组数据查找

int QByteArray::indexOf(const QByteArray &ba, int from = 0) const

返回此字节数组中第一个出现字节数组ba的索引位置,从索引位置向前搜索。如果找不到ba,则返回-1。

示例:

QByteArray x("sticky question");
QByteArray y("sti");
x.indexOf(y);               // returns 0
x.indexOf(y, 1);            // returns 10
x.indexOf(y, 10);           // returns 10
x.indexOf(y, 11);           // returns -1

1.12 去除空白字符

QByteArray QByteArray::simplified() const

返回一个从开始和结束中删除空白的字节数组,其中每个内部空白序列都用一个空格替换。

空白表示标准C ++ isspace()函数在C语言环境中返回true的任何字符。这包括在ASCII语言环境中的ASCII isspace()函数返回true。这包括ASCII字符’\ t’,‘\ n’,‘\ v’,‘\ f’,‘\ r’和’ '。

QByteArray QByteArray::trimmed() const

返回从开始和结束删除空白的字节数组。

空白表示标准C ++ isspace()函数在C语言环境中返回true的任何字符。这包括ASCII字符’\ t’,‘\ n’,‘\ v’,‘\ f’,‘\ r’和’ '。

示例:

QByteArray All_data;   //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear();      //清空数组All_data.append("*1024,24.56\n");
All_data.append("#12345678\n");qDebug()<<All_data; //原始结果:"*1024,24.56\n#12345678\n"
qDebug()<<All_data.simplified();//去除所有的空白字符,结果:"*1024,24.56 #12345678"
qDebug()<<All_data.trimmed(); //去掉结尾的空白字符,结果:"*1024,24.56\n#12345678"

1.13 QBuffer类介绍

1.13.1QBuffer基本使用介绍

说明: QBuffer主要解决,char*类型的值。

QBuffer类为QByteArray提供QIODevice接口。

QBuffer允许你使用QIODevice接口访问QByteArray。

QByteArray被视为一个标准的随机访问文件。

例:

QBuffer buffer;
char ch;
buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch);  // ch == 'Q'
buffer.getChar(&ch);  // ch == 't'
buffer.getChar(&ch);  // ch == ' '
buffer.getChar(&ch);  // ch == 'r'

默认情况下,创建QBuffer时为您创建一个内部QByteArray缓冲区。你可以通过调用buffer()直接访问这个缓冲区。 你也可以通过调用setBuffer()或者将你的数组传递给QBuffer的构造函数来将QBuffer与现有的QByteArray一起使用。

调用open()打开缓冲区。 然后调用write()或putChar()写入缓冲区,并通过read(),readLine(),readAll()或getChar()从中读取。 Size()返回缓冲区的当前大小,你可以调用seek()来寻找缓冲区中的任意位置。 当你完成访问缓冲区时,调用close()关闭释放缓冲区。

以下代码片段显示了如何使用QDataStream和QBuffer将数据写入QByteArray:

QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);QDataStream out(&buffer);
out << QApplication::palette();

实际上,我们可以将应用程序的QPalette转换为一个字节数组。

以下是如何从QByteArray中读取数据的方法:

QPalette palette;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::ReadOnly);QDataStream in(&buffer);
in >> palette;

QTextStream和QDataStream还提供了便捷的构造函数,它们使用QByteArray并在后台创建QBuffer。

当新数据到达缓冲区时,QBuffer发射readyRead()信号。 通过连接这个信号,你可以在处理之前使用QBuffer来存储临时数据。每次新数据写入缓冲区时,QBuffer也会发送bytesWritten()。

另请参阅QFile,QDataStream,QTextStream和QByteArray。

1.13.2 数据读写示例

QByteArray All_data;   //创建字符数组
All_data.resize(1024); //指定字节大小
All_data.clear();      //清空数组QBuffer buffer;
buffer.setBuffer(&All_data);  //将QByteArray空间设置给QBuffer
char ch;
buffer.open(QBuffer::ReadWrite); //读写权限打开
buffer.write("123456789");buffer.seek(0);  //移动到空间第0个位置buffer.getChar(&ch);  // ch == '1'
qDebug()<<ch;buffer.getChar(&ch);  // ch == '2'
qDebug()<<ch;qDebug()<<buffer.readAll(); //读取空间全部数据 ,结果:"3456789"buffer.seek(0);  //移动到空间第0个位置
qDebug()<<buffer.readAll(); //读取空间全部数据 ,结果:"123456789"

1.13.3 数据处理一行的数据

QByteArray All_data;   //创建字符数组
All_data.resize(1024);   //指定字节大小
All_data.clear();        //清空数组QBuffer buffer;
buffer.setBuffer(&All_data);  //将QByteArray空间设置给QBuffer
char ch;
buffer.open(QBuffer::ReadWrite); //读写权限打开
buffer.write("123\n456\n789\n");
buffer.seek(0); //移动指针为到0
if(buffer.canReadLine())//判断是否可以读取一行数据
{qDebug()<<buffer.readLine(); //结果:"123\n"
}

相关文章:

QByteArray字节数组

QByteArray字节数组 文章目录 QByteArray字节数组1.1 QByteArray类基本使用说明1.2 设置数组字节大小1.3 返回数组大小1.4 将数据转为其他类型1.5 将数据转为C语言的字符指针返回1.6 数组数据追加1.7 清除数组数据为指定值1.8 数组数据插入1.9 删除指定位置指定长度的数据1.10 …...

ubuntu20.04.3中qt程序界面嵌套另一个qt界面

先上代码 #include "mainwindow.h" #include <QApplication> #include <iostream> using namespace std; #ifdef _WIN32// Windows 平台的代码 #include <windows.h> #elif __linux__// Linux 平台的代码// ...#include <X11/Xlib.h> #else…...

【chainlit】使用chainlit部署chatgpt

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

测开 | Vue速查知识点

文章目录 Vue知识1. Vue 概述2. Vue 代码格式3. Vue 指令3.1 v-bind & v-model3.2 v-on3.3 v-if和v-show3.4 v-for 4. 生命周期 Vue知识 1. Vue 概述 简介&#xff1a; Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的 渐进式框架。与其他…...

数据结构——二叉树的基本概念及顺序存储(堆)

目录 一.前言 二.树概念及结构 2.1 树的概念 2.2 树的相关概念 2.3 树的表现 2.4 树在实际中的应用&#xff08;表示文件系统的目录树结构&#xff09; 三.二叉树的概念及结构 3.1 概念 3.2 特殊的二叉树 3.3 二叉树的性质 3.4 二叉树的存储结构 3.4.1 顺序存储 3…...

acwing算法基础之基础算法--整数二分算法

目录 1 知识点2 代码模板 1 知识点 有单调性一定可以二分&#xff0c;但在某些情况下&#xff0c;不具有单调性也可以二分。 单调性也可以抽象成某类性质&#xff0c;分界点左边不满足此性质&#xff0c;而右边满足此性质。当然也可以分界点左边满足此性质&#xff0c;而右边不…...

windows C 开发

在win下用C/C开发 非图形界面 应用程序 基础环境包括3个内容1. API : 一般是系统(包括c标准库和其他dll)提供的2. 编译器 : 可以是gnu的,可以是微软提供的3. 编辑器 : 随意都可以 // 不再考虑范围开发方式(API编译器) 原生windows API 使用 Windows API 来编写非视窗代码。…...

C语言——动态内存管理详解(内存结构、动态内存函数、易错题、柔性数组)

本篇概要 本篇文章从基本出发讲述为什么要存在动态内存分配&#xff0c;动态内存函数有哪些&#xff0c;常见的动态内存错误&#xff0c;一些关于内存分配的练习题以及柔性数组的相关知识。 文章目录 本篇概要1.为什么存在动态内存分配1.1为什么要动态分配内存1.2内存结构 2.常…...

2023年全国控制科学与工程学科评估结果 - 自动化考研

考研选择学校时&#xff0c;控制科学与工程考研学校排名情况怎样是广大考研学子十分关心的问题&#xff0c;以下是我们自动化考研联盟为大家整理得最新控制科学与工程学科评估结果情况&#xff0c;还比较权威&#xff0c;供大家参考。 最后祝大家一战成硕,有其他问题欢迎评论区…...

React wangEditor5 使用说明

1、支持包安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-react # 或者 npm install wangeditor/editor-for-react --save2、使用 import wangeditor/editor/dist/css/style.css // 引入 cssimport { useState…...

vue 实现数字验证码功能

需求&#xff1a;写了一个 手机发送验证码后 输入固定验证码的功能 封装成一个组件,如下: <template><div class"conts"><div class"box"><div class"code_list"><div :class"[ code_item, hideIndex 0 ? co…...

【计算机网络】HTTP协议详解(举例解释,超级详细)

文章目录 一、HTTP协议简单介绍 1、1 什么是HTTP协议 1、2 再次理解“协议” 二、HTTP请求 2、1 HTTP的工作过程 2、1、1 demo代码 2、2 URL 介绍 2、2、1 urlencode 和 urldecode 2、3 HTTP 请求格式 三、HTTP响应 3、1 响应demo 3、2 HTTP 响应格式 四、HTTP 请求和响应中的…...

PCB放置过孔技巧

合理的放置过孔能有效的节约面积。 我们根据嘉立创的pcb工艺能力中写出单双面板最小过孔为0.3mm(内径)/0.5mm(外径) 设置过孔尺寸外直径为24mil&#xff08;0.61mm&#xff09;&#xff09;内直径为12mil&#xff08;0.305mm&#xff09; 嘉立创PCB工艺加工能力范围说明-嘉立…...

淘宝商品详情接口数据采集用于上货,无货源选品上货,采集淘宝天猫商品详情数据

淘宝商品详情接口数据采集可用于上货。先通过关键字搜索接口&#xff0c;抓取到批量的商品ID&#xff0c;再将商品ID传入商品详情数据采集接口的请求参数中&#xff0c;从而达到批量抓取商品详情数据的功能。 接口名称&#xff1a;item_get&#xff0c;获取商品详情数据&#…...

DoS和DDos攻攻击

介绍 DDoS 和 DoS 攻击是我们最常见的网络攻击之一&#xff0c;而且历史相当悠久&#xff0c;算是很经典的两种攻击方式&#xff0c;但它们实际上是如何运作的呢&#xff1f; 虽然两者基本上都能够让工作停摆&#xff0c;但其中有很大的差异&#xff0c;接下来我们将逐一说明&a…...

Python实时采集Windows CPU\MEMORY\HDD使用率

文章目录 安装psutil库在Python脚本中导入psutil库获取CPU当前使用率&#xff0c;并打印结果获取内存当前使用率&#xff0c;并打印结果获取磁盘当前使用情况&#xff0c;并打印结果推荐阅读 要通过Python实时采集Windows性能计数器的数据&#xff0c;你可以使用psutil库。psut…...

【改造中序遍历算法】1038. 从二叉搜索树到更大和树

1038. 从二叉搜索树到更大和树 解题思路 改造中序遍历算法先遍历右子树 然后累加当前节点的值 再遍历左子树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode…...

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长&#xff0c;为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据&#xff0c;这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增&#xff0c;从 2022 年的…...

【数据结构和算法】--N叉树中,返回某些目标节点到根节点的所有路径

目录 一、前言二、具体实现及拓展2.1、递归-目标节点到根节点的路径数据2.2、list转换为tree结构2.3、tree转换为list结构 一、前言 这么多年工作经历中&#xff0c;“数据结构和算法”真的是超重要&#xff0c;工作中很多业务都能抽象成某种数据结构问题。下面是项目中遇到的…...

进程和线程的区别 线程之间共享的资源

线程和进程都是操作系统中的执行单位&#xff0c;但它们在以下几个方面存在区别&#xff1a; 相同处&#xff1a; 1.执行环境&#xff1a;线程和进程都有自己的执行上下文&#xff0c;包括程序计数器、寄存器和栈&#xff0c;可以独立执行指令。 2.并发性&#xff1a;线程和进…...

基于Matlab实现logistic方法(源码+数据)

Logistic回归是一种常用的分类算法&#xff0c;适用于二分类问题。本文将介绍如何使用Matlab实现Logistic回归方法&#xff0c;并通过一个示例演示其应用。 文章目录 引言实现步骤1. 数据准备2. 特征缩放3. 模型训练4. 模型评估 源码数据下载 引言 Logistic回归是一种广泛应用…...

leetCode 121. 买卖股票的最佳时机 贪心算法

给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。…...

《Oracle系列》Oracle 索引使用情况查看

查询用户的索引 select index_name,table_name,tablespace_name,index_type,uniqueness,statusfrom dba_indexeswhere owner <用户名>;查询用户的索引列 select index_name,table_name,column_name,index_owner,table_ownerfrom dba_ind_columnswhere table_owner &l…...

解决Invalid bound statement (not found)错误~

报错如下所示&#xff1a; 找了好久&#xff0c;刚开始以为是名称哪里写的有问题&#xff0c;但仔细检查了好多遍都不是 最后发现了问题如下所示&#xff1a; UserMapper里面的内容被我修改了&#xff0c;但classes中的内容还是原来的内容&#xff0c;所以才导致了编译器报错n…...

基于SpringBoot的反诈宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

【改进哈里鹰算法(NCHHO)】使用混沌和非线性控制参数来提高哈里鹰算法的优化性能,解决车联网相关的路由问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【C语言】宏定义

&#x1f6a9; WRITE IN FRONT&#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四"&#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博…...

库存三层模型概述

库存分层 &#xff08;1&#xff09;电商库存体系分为三层&#xff1a;销售层、调度层、仓库层。 库存三层模型&#xff1a;销售库存&#xff0c;调度层属于订单领域-履约。实物库存属于库存领域 WMS的库存跟调度层是一致的。 但是销售库存跟调度层可能不一致&#xff0c;因为…...

SNERT预备队招新CTF体验赛-Web(SWCTF)

目录 1、F12 2、robots 3、game1-喂青蛙 4、game 2 - flap bird 5、game 3 - Clash 6、Get&Post 7、sql &#xff08;1&#xff09;手工注入 &#xff08;2&#xff09;工具注入 8、命令执行漏洞 9、文件上传漏洞 10、文件泄露 11、php反序列化漏洞 12、PHP绕…...

OpenGLES:绘制一个彩色、旋转的3D圆柱

一.概述 上一篇博文讲解了怎么绘制一个彩色旋转的立方体 这一篇讲解怎么绘制一个彩色旋转的圆柱 圆柱的顶点创建主要基于2D圆进行扩展&#xff0c;与立方体没有相似之处 圆柱绘制的关键点就是将圆柱拆解成&#xff1a;两个Z坐标不为0的圆 一个长方形的圆柱面 绘制2D圆的…...

网站备案拍照 广州/怎么查百度搜索排名

新一代可重构ERP系统(转)新一代可重构ERP系统网络化时代&#xff0c;企业对传统ERP提出了新的要求&#xff0c;新一代ERP应运而生&#xff0c;本文简要介绍新一代ERP的发展趋势&#xff0c;同时详细介绍天剑新一代可重构ERP的内容、特点、技术架构、关键技术、系统实现方法和实…...

网站注册信息查询/旺道网站排名优化

#!/bin/bashecho -n Count:tput sccount0while true;doif [ $count -lt 40 ];thenlet count;sleep 1;tput rctput edecho -n $count;elseexit 0;fidone使用Shell实现一个倒计时&#xff0c; 其中&#xff0c;tput sc 是存储光标位置&#xff0c; tput rc 是恢复光标位置 tput …...

wordpress 更新网站/免费发帖平台

大纲复习 服务治理&#xff1a; nacos 注册中心&#xff08;nacos 同时解决配置&#xff09;Eureka配置 为什么要用注册中心 一旦服务提供者地址变化&#xff0c;就需要手工修改代码 一旦是多个服务提供者&#xff0c;无法实现负载均衡功能 一旦服务变得越来越多&#xff0c;…...

京东网站建设步骤/广东云浮疫情最新情况

全球最厉害的14位程序员都有哪些人&#xff1f;接下来让我们一起来看一下让业界膜拜的这十几位顶级编程大神。 注意&#xff0c;排名不分先后。 01 Jon Skeet 个人名望&#xff1a;程序技术问答网站Stack Overflow总排名第一的大神&#xff0c;每月的问答量保持在425个左右。 …...

现在学做网站赚钱吗/如何自己创建网址

引题&#xff1a;大家在日常工作中&#xff0c;我想99%都是用到sqlplus来登陆数据库&#xff0c;对数据库进行管理、调优、配置。那么如果有很多台数据库的时候&#xff0c;我们在连接后全部是统一的SQL>&#xff0c;就有可能发生目前不知道连接那个库上了&#xff0c;当我们…...

网页设计毕业论文审批表/pc优化工具

百科&#xff1a;http://baike.baidu.com/link?urlatVCMfHUCkH7fdWmP41OL_kpyAmACcij4ffVTGg_mXtgoequLcIp1BwIiIJz7NyIPJhlWhvW7zs2L1HuhhDSOq <ehcache> <!--磁盘存储配置&#xff1a;用来指定缓存在磁盘上的存储位置。 可以使用JavaVM环境变量(user.home, user.di…...