qt c++ 大小端字节序数据获取与转换

  • 按照约定的大小端顺序,在数组中取出指定数据,并转为指令的大小端字节序的一些方法

qint8 extractqInt8(const QByteArray &byteArray, int startPos)
{// 检查起始位置和数据是否足够if (startPos >= byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const char *data = byteArray.constData() + startPos;// 提取数据并进行符号扩展qint8 value = static_cast<qint8>(data[0]);return value;
}quint8 extractqUint8(const QByteArray &byteArray, int startPos)
{// 检查起始位置和数据是否足够if (startPos >= byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const char *data = byteArray.constData() + startPos;// 提取数据并进行符号扩展quint8 value = static_cast<quint8>(data[0]);return value;
}/**************** 输入数据为大端字节序 ****************/
// 提取小端字节序的 quint16 值
quint16 extractqUint16_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint16 value = static_cast<quint16>(data[1])| (static_cast<quint16>(data[0]) << 8);return value;
}// 提取小端字节序的 quint32 值
quint32 extractqUint32_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint32 value = static_cast<quint32>(data[3])| (static_cast<quint32>(data[2]) << 8)| (static_cast<quint32>(data[1]) << 16)| (static_cast<quint32>(data[0]) << 24);return value;
}// 提取小端字节序的 quint64 值
quint64 extractqUint64_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint64 value = static_cast<quint64>(data[7])| (static_cast<quint64>(data[6]) << 8)| (static_cast<quint64>(data[5]) << 16)| (static_cast<quint64>(data[4]) << 24)| (static_cast<quint64>(data[3]) << 32)| (static_cast<quint64>(data[2]) << 40)| (static_cast<quint64>(data[1]) << 48)| (static_cast<quint64>(data[0]) << 56);return value;
}// 提取小端字节序的 qint16 值
qint16 extractqInt16_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint16 value = static_cast<qint16>(data[1])| (static_cast<qint16>(data[0]) << 8);return value;
}// 提取小端字节序的 qint32 值
qint32 extractqInt32_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint32 value = static_cast<qint32>(data[3])| (static_cast<qint32>(data[2]) << 8)| (static_cast<qint32>(data[1]) << 16)| (static_cast<qint32>(data[0]) << 24);return value;
}// 提取小端字节序的 qint64 值
qint64 extractqInt64_BE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint64 value = static_cast<qint64>(data[7])| (static_cast<qint64>(data[6]) << 8)| (static_cast<qint64>(data[5]) << 16)| (static_cast<qint64>(data[4]) << 24)| (static_cast<qint64>(data[3]) << 32)| (static_cast<qint64>(data[2]) << 40)| (static_cast<qint64>(data[1]) << 48)| (static_cast<qint64>(data[0]) << 56);return value;
}/**************** 输入小端字节序数据 ****************/
// 提取小端字节序的 quint16 值
quint16 extractqUint16_LE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据quint16 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(quint16));return littleEndianValue;
}// 提取小端字节序的 quint32 值
quint32 extractqUint32_LE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}//    const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);//    quint32 littleEndianValue = static_cast<quint32>(data[0])//                                | (static_cast<quint32>(data[1]) << 8)//                                | (static_cast<quint32>(data[2]) << 16)//                                | (static_cast<quint32>(data[3]) << 24);quint32 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(quint32));return littleEndianValue;
}// 提取小端字节序的 quint64 值
quint64 extractqUint64_LE2LE(const QByteArray &byteArray, int startPos)
{// 检查起始位置和数据是否足够if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据quint64 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(quint64));return littleEndianValue;
}// 提取小端字节序的 qint16 值
qint16 extractqInt16_LE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据qint16 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(qint16));return littleEndianValue;
}// 提取小端字节序的 qint32 值
qint32 extractqInt32_LE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}qint32 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(qint32));return littleEndianValue;
}// 提取小端字节序的 qint64 值
qint64 extractqInt64_LE2LE(const QByteArray &byteArray, int startPos)
{if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}qint64 littleEndianValue;std::memcpy(&littleEndianValue, byteArray.constData() + startPos, sizeof(qint64));return littleEndianValue;
}/************************ 以下为大端数据,转为大端数据 *******************/
//x86架构默认为小端存储,所以以下方法在x86平台使用时,注意
// 提取大端字节序的 quint16 值
quint16 extractqUint16_BE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint16 littleEndianValue = static_cast<quint16>(data[1])| (static_cast<quint16>(data[0]) << 8);// 将小端字节序转换为大端字节序quint16 bigEndianValue = (littleEndianValue >> 8)| (littleEndianValue << 8);return bigEndianValue;
}
// 提取大端字节序的 quint32 值
quint32 extractqUint32_BE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint32 littleEndianValue = static_cast<quint32>(data[3])| (static_cast<quint32>(data[2]) << 8)| (static_cast<quint32>(data[1]) << 16)| (static_cast<quint32>(data[0]) << 24);// 将小端字节序转换为大端字节序quint32 bigEndianValue = ((littleEndianValue & 0x000000FF) << 24)| ((littleEndianValue & 0x0000FF00) << 8)| ((littleEndianValue & 0x00FF0000) >> 8)| ((littleEndianValue & 0xFF000000) >> 24);return bigEndianValue;
}// 提取大端字节序的 quint64 值
quint64 extractqUint64_BE2BE(const QByteArray &byteArray, int startPos)
{// 检查起始位置和数据是否足够if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint64 littleEndianValue = static_cast<quint64>(data[7])| (static_cast<quint64>(data[6]) << 8)| (static_cast<quint64>(data[5]) << 16)| (static_cast<quint64>(data[4]) << 24)| (static_cast<quint64>(data[3]) << 32)| (static_cast<quint64>(data[2]) << 40)| (static_cast<quint64>(data[1]) << 48)| (static_cast<quint64>(data[0]) << 56);// 将小端字节序转换为大端字节序quint64 bigEndianValue = ((littleEndianValue & 0x00000000000000FFULL) << 56)| ((littleEndianValue & 0x000000000000FF00ULL) << 40)| ((littleEndianValue & 0x0000000000FF0000ULL) << 24)| ((littleEndianValue & 0x00000000FF000000ULL) << 8)| ((littleEndianValue & 0x000000FF00000000ULL) >> 8)| ((littleEndianValue & 0x0000FF0000000000ULL) >> 24)| ((littleEndianValue & 0x00FF000000000000ULL) >> 40)| ((littleEndianValue & 0xFF00000000000000ULL) >> 56);return bigEndianValue;
}
// 提取大端字节序的 qint16 值
qint16 extractqInt16_BE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint16 littleEndianValue = static_cast<qint16>(data[1])| (static_cast<qint16>(data[0]) << 8);// 将小端字节序转换为大端字节序qint16 bigEndianValue = (littleEndianValue >> 8)| (littleEndianValue << 8);return bigEndianValue;
}
// 提取大端字节序的 qint32 值
qint32 extractqInt32_BE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint32 littleEndianValue = static_cast<qint32>(data[3])| (static_cast<qint32>(data[2]) << 8)| (static_cast<qint32>(data[1]) << 16)| (static_cast<qint32>(data[0]) << 24);// 将小端字节序转换为大端字节序qint32 bigEndianValue = ((littleEndianValue & 0x000000FF) << 24)| ((littleEndianValue & 0x0000FF00) << 8)| ((littleEndianValue & 0x00FF0000) >> 8)| ((littleEndianValue & 0xFF000000) >> 24);return bigEndianValue;
}// 提取大端字节序的 qint64 值
qint64 extractqInt64_BE2BE(const QByteArray &byteArray, int startPos)
{// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);// 提取数据并进行符号扩展qint64 littleEndianValue = static_cast<qint64>(data[7])| (static_cast<qint64>(data[6]) << 8)| (static_cast<qint64>(data[5]) << 16)| (static_cast<qint64>(data[4]) << 24)| (static_cast<qint64>(data[3]) << 32)| (static_cast<qint64>(data[2]) << 40)| (static_cast<qint64>(data[1]) << 48)| (static_cast<qint64>(data[0]) << 56);// 将小端字节序转换为大端字节序qint64 bigEndianValue = ((littleEndianValue & 0x00000000000000FFULL) << 56)| ((littleEndianValue & 0x000000000000FF00ULL) << 40)| ((littleEndianValue & 0x0000000000FF0000ULL) << 24)| ((littleEndianValue & 0x00000000FF000000ULL) << 8)| ((littleEndianValue & 0x000000FF00000000ULL) >> 8)| ((littleEndianValue & 0x0000FF0000000000ULL) >> 24)| ((littleEndianValue & 0x00FF000000000000ULL) >> 40)| ((littleEndianValue & 0xFF00000000000000ULL) >> 56);return bigEndianValue;
}/************************ 以下为小端数据,转为大端数据 *******************/
//x86架构默认为小端存储,所以以下方法在x86平台使用时,注意
// 提取大端字节序的 quint16 值
quint16 extractqUint16_LE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint16 littleEndianValue = static_cast<quint16>(data[0])| (static_cast<quint16>(data[1]) << 8);// 将小端字节序转换为大端字节序quint16 bigEndianValue = (littleEndianValue >> 8)| (littleEndianValue << 8);return bigEndianValue;
}// 提取大端字节序的 quint32 值
quint32 extractqUint32_LE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint32 littleEndianValue = static_cast<quint32>(data[0])| (static_cast<quint32>(data[1]) << 8)| (static_cast<quint32>(data[2]) << 16)| (static_cast<quint32>(data[3]) << 24);// 将小端字节序转换为大端字节序quint32 bigEndianValue = ((littleEndianValue & 0x000000FF) << 24)| ((littleEndianValue & 0x0000FF00) << 8)| ((littleEndianValue & 0x00FF0000) >> 8)| ((littleEndianValue & 0xFF000000) >> 24);return bigEndianValue;
}// 提取大端字节序的 quint64 值
quint64 extractqUint64_LE2BE(const QByteArray &byteArray, int startPos)
{// 检查起始位置和数据是否足够if (startPos + 8 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);quint64 littleEndianValue = static_cast<quint64>(data[0])| (static_cast<quint64>(data[1]) << 8)| (static_cast<quint64>(data[2]) << 16)| (static_cast<quint64>(data[3]) << 24)| (static_cast<quint64>(data[4]) << 32)| (static_cast<quint64>(data[5]) << 40)| (static_cast<quint64>(data[6]) << 48)| (static_cast<quint64>(data[7]) << 56);// 将小端字节序转换为大端字节序quint64 bigEndianValue = ((littleEndianValue & 0x00000000000000FFULL) << 56)| ((littleEndianValue & 0x000000000000FF00ULL) << 40)| ((littleEndianValue & 0x0000000000FF0000ULL) << 24)| ((littleEndianValue & 0x00000000FF000000ULL) << 8)| ((littleEndianValue & 0x000000FF00000000ULL) >> 8)| ((littleEndianValue & 0x0000FF0000000000ULL) >> 24)| ((littleEndianValue & 0x00FF000000000000ULL) >> 40)| ((littleEndianValue & 0xFF00000000000000ULL) >> 56);return bigEndianValue;
}// 提取大端字节序的 qint16 值
qint16 extractqInt16_LE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 2 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint16 littleEndianValue = static_cast<qint16>(data[0])| (static_cast<qint16>(data[1]) << 8);// 将小端字节序转换为大端字节序qint16 bigEndianValue = (littleEndianValue >> 8)| (littleEndianValue << 8);return bigEndianValue;
}
// 提取大端字节序的 qint32 值
qint32 extractqInt32_LE2BE(const QByteArray &byteArray, int startPos)
{if (startPos + 4 > byteArray.size()) {qWarning() << "Invalid start position or insufficient data.";return 0;}const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint32 littleEndianValue = static_cast<qint32>(data[0])| (static_cast<qint32>(data[1]) << 8)| (static_cast<qint32>(data[2]) << 16)| (static_cast<qint32>(data[3]) << 24);// 将小端字节序转换为大端字节序qint32 bigEndianValue = ((littleEndianValue & 0x000000FF) << 24)| ((littleEndianValue & 0x0000FF00) << 8)| ((littleEndianValue & 0x00FF0000) >> 8)| ((littleEndianValue & 0xFF000000) >> 24);return bigEndianValue;
}// 提取大端字节序的 qint64 值
qint64 extractqInt64_LE2BE(const QByteArray &byteArray, int startPos)
{// 从 QByteArray 中提取数据const uchar *data = reinterpret_cast<const uchar *>(byteArray.constData() + startPos);qint64 littleEndianValue = static_cast<qint64>(data[0])| (static_cast<qint64>(data[1]) << 8)| (static_cast<qint64>(data[2]) << 16)| (static_cast<qint64>(data[3]) << 24)| (static_cast<qint64>(data[4]) << 32)| (static_cast<qint64>(data[5]) << 40)| (static_cast<qint64>(data[6]) << 48)| (static_cast<qint64>(data[7]) << 56);// 将小端字节序转换为大端字节序qint64 bigEndianValue = ((littleEndianValue & 0x00000000000000FFULL) << 56)| ((littleEndianValue & 0x000000000000FF00ULL) << 40)| ((littleEndianValue & 0x0000000000FF0000ULL) << 24)| ((littleEndianValue & 0x00000000FF000000ULL) << 8)| ((littleEndianValue & 0x000000FF00000000ULL) >> 8)| ((littleEndianValue & 0x0000FF0000000000ULL) >> 24)| ((littleEndianValue & 0x00FF000000000000ULL) >> 40)| ((littleEndianValue & 0xFF00000000000000ULL) >> 56);return bigEndianValue;
}

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

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

相关文章

品致分档高频电流探头交直流电流探头的功能和应用领域

品致分档高频电流探头可以精确测量最大直流 DC-12MHz&#xff0c;具有高带宽&#xff0c;高精度的测量特点&#xff0c;且支持量程档位切换&#xff0c;满足用户一机多用的需求。探头自带归零和消磁功能&#xff0c;在包容用户的使用环境下&#xff0c;精度也高达 1%。标准的BN…

APP兼容性测试都需要考虑哪些场景?

APP测试的时候都需要验证兼容性。那兼容性测试需要考虑哪些场景&#xff1f; 进行APP的兼容性测试时&#xff0c;需要考虑以下一些常见的测试场景&#xff1a; 1. 操作系统兼容性&#xff1a;测试应用程序在不同操作系统上的兼容性&#xff0c;如iOS、Android、Windows等。确…

Nginx的负载均衡(加权轮询)

Nginx的负载均衡模块可以使用加权轮询算法进行请求分发。加权轮询是一种根据服务器权重分配请求的算法&#xff0c;权重越高的服务器会被分配到更多的请求。 要实现加权轮询&#xff0c;首先需要在Nginx的配置文件中定义一组后端服务器&#xff0c;并为每个服务器分配一个权重…

Java中可以用的大数据推荐算法

在Java中实现大数据推荐算法时&#xff0c;通常会使用一些开源的机器学习库&#xff0c;如Apache Mahout、Weka、DL4J&#xff08;DeepLearning4j&#xff0c;用于深度学习&#xff09;或者Spark MLlib&#xff08;用于在Spark集群上运行&#xff09;。由于完整实现一个大数据推…

阿里云ECS实例镜像本地取证

更新时间&#xff1a;2024年03月21日10:09:37 1. 说明 很多非法案件中&#xff0c;服务器是直接搭建在阿里云上的&#xff0c;比如我们在拿到OSSKey之后&#xff08;技术方法、其它方法等&#xff09;&#xff0c;可以将涉案服务器镜像导出&#xff0c;在本地进行取证分析。 …

接口的应用、 适配器设计模式

接口的应用 适配器设计模式 Inter package com.itheima.a09;public interface Inter {public abstract void show1();public abstract void show2();public abstract void show3();public abstract void show4();}InterAdapter package com.itheima.a09; //抽象 public abs…

前端自测 - 那些经典的bug

前言 我一直坚持的一个观点&#xff0c;就是不以bug数论成败&#xff0c;但是这个需要加一个前提&#xff0c;就是不能出现那些低级的bug&#xff0c;更不能反复的出现。 由此整理了一系列我认为比较经典常见的前端bug&#xff0c;都是在项目中多次遇到过的&#xff0c;用于前…

如何学习大模型

学习大模型&#xff08;例如GPT-3、BERT等&#xff09;需要一定的数学和编程基础&#xff0c;以及对人工智能、机器学习、自然语言处理等领域的了解。以下是一个学习大模型的基本路线&#xff1a; 基础知识储备&#xff1a; 数学基础&#xff1a;掌握线性代数、概率论与数理统…

史上最全,呕心沥血总结oracle推进SCN方法(五)

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。前面介…

2014年上海高考作文题目(ChatGPT版)

一、2014年6月7日上海高考作文题目 生活中&#xff0c;人们常用认可度判别事物&#xff0c;区分高下。请写一篇文章&#xff0c;谈谈你对“认可度”的认识和思考。 要求&#xff1a;&#xff08;1&#xff09;自拟题目&#xff1b;&#xff08;2&#xff09;不少于800字。 二、…

小牛翻译API详解:功能、优势介绍及案例实战(附完整代码)

写在前面小牛翻译是做什么的案例-调用图片翻译API进行英文翻译✔准备工作✔获取密钥✔调用API✔完整代码✔运行项目 使用建议 写在前面 随着全球化的快速发展和跨国交流的增多&#xff0c;翻译软件的市场需求持续增长。根据市场数据&#xff0c;全球语言翻译软件市场规模在过去…

google keybox.xml格式 内容有哪些 Keybox数量、设备ID、算法的 私钥 公钥 证书链 (ECDSA即ECC, RSA)

根据您提供的文件内容&#xff0c;keybox.xml 文件包含以下主要信息&#xff1a; Keybox数量 ([NumberOfKeyboxes](file:///d%3A/010F200/svn/ProduceToolMfc/FtSmartPos/FtSmartPos/ToolBydMes/httpclient/e%3A%5CGoogleKey%5CLinux_AttestationKeyboxPack_Tool%5CLinux_Atte…

golang定时器使用示例

1.定时器创建与停止 //定时器使用t1 : time.NewTimer(2 * time.Second)<-t1.Cfmt.Println("timer1 fired")t2 : time.NewTimer(5 * time.Second)go func() {fmt.Println("go协程处理中,等待5秒后输出...")<-t2.Cfmt.Println("timer2 fired&quo…

富格林:获取阻挠暗箱伎俩方案

富格林指出&#xff0c;在当今经济不稳定的环境下&#xff0c;投资者们越来越倾向于将资金投入到相对安全稳定的产品中&#xff0c;而黄金往往是他们的首选。然而&#xff0c;成功投资现货黄金并不容易&#xff0c;需要掌握阻挠暗箱伎俩的技巧和策略。以下是富格林给大家准备的…

场景图生成网络——RelTR(TPAMI2023)

一、ReITR概述 场景图是一种图结构&#xff0c;其节点代表图像中的实体&#xff0c;边代表实体间的关系。这项技术超越了传统的对象检测&#xff0c;与视觉关系检测紧密相关&#xff0c;对图像检索、图像字幕、视觉问答&#xff08;VQA&#xff09;和图像生成等多种视觉-语言任…

从零开始搭建盲盒小程序源码的步骤指南

一、引言 盲盒小程序以其神秘性和趣味性深受用户喜爱&#xff0c;越来越多的开发者开始关注并尝试搭建盲盒小程序。本文将详细介绍从零开始搭建盲盒小程序源码的步骤&#xff0c;帮助初学者快速上手。 二、准备工作 1.注册小程序账号&#xff1a;在微信公众平台注册小程序账…

男士内裤怎么选?五款不能错过的超舒适男士内裤

在快节奏的现代都市生活中&#xff0c;男士们同样需要关注内在穿搭的品质与舒适度。一条优质贴身的男士内裤&#xff0c;不仅是日常穿着的舒适保障&#xff0c;更是展现男性精致品味的秘密武器。今天&#xff0c;就让我们一同探讨如何挑选出最适合自己的男士内裤&#xff0c;并…

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮几何对象

ArcGIS JSAPI 学习教程 - ArcGIS Maps SDK for JavaScript - 框选显示高亮对象 核心代码完整代码&#xff1a;在线示例 在研究 ArcGIS JSAPI RenderNode 高亮&#xff08;highlights&#xff09;FBO 的时候&#xff0c;实现了一下框选高亮几何对象&#xff0c;这里分享一下。 …

LlamaIndex三 配置

前言 在上篇LlamIndex二 RAG应用开发 - 掘金 (juejin.cn)中&#xff0c;我们学习到LlamaIndex对RAG的全面支持。这篇文章&#xff0c;我们就来细化这个过程&#xff0c;尝试各种配置选项&#xff0c;满足不同场景需求。学习过后&#xff0c;大家再开发RAG应用&#xff0c;会更…

Sketch语言设置指南:将英文版改成中文版的教程

Sketch版本的转换一直是困扰大家的关键问题。如今UI设计领域的UI设计软件很多&#xff0c;但大部分都是英文版。对于国内英语基础差的设计师来说&#xff0c;使用这样的软件无形中增加了工作量&#xff0c;往往需要在设计编辑的同时查阅翻译。即时设计详细介绍了Sketch英文版如…