深入学习Arduino_JSON库

news2024/12/23 17:49:39

忘记过去,超越自己

  • ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️
  • ❤️ 本篇创建记录 2023-07-26 ❤️
  • ❤️ 本篇更新记录 2023-07-26 ❤️
  • 🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝
  • 🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持!
  • 🔥 Arduino ESP8266教程累计帮助过超过1W+同学入门学习硬件网络编程,入选过选修课程,刊登过无线电杂志 🔥零基础从入门到熟悉Arduino平台下开发ESP8266,同时会涉及网络编程知识。专栏文章累计超过60篇,分为基础篇、网络篇、应用篇、高级篇,涵盖ESP8266大部分开发技巧。

快速导航
单片机菜鸟的博客快速索引(快速找到你要的)

如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。

文章目录

    • 1.前言
    • 2.JSON基础介绍
      • 2.1 什么是Json?
      • 2.2 具体使用例子
        • 2.2.1 JSON对象例子
        • 2.2.2 JSON对象数组
    • 3.Arduino_JSON库
      • 3.1 JSONObject
      • 3.2 JSONArray
      • 3.3 JSONKitchenSink
      • 3.4 JSONValueExtractor
    • 4. 核心API
      • 4.1 JSON.parse —— 解析字符串内容
      • 4.2 JSON.typeof —— 判断类型
      • 4.3 hasOwnProperty —— 是否存在某一个属性
      • 4.4 length —— 用于判断数组长度
      • 4.5 keys —— 用于判断object的属性
      • 4.6 JSON.stringify —— 把json转成字符串

1.前言

一直以来,博主的事例代码中都一直使用到JSON数据格式。并且之前也讲解了

  • 深入学习ArduinoJson库 V5版本
  • 深入学习ArduinoJson库 V6版本

两篇内容来重点讲解讲解Arduino平台下的JSON库。

本篇主要是另外介绍一个虽然用得少但是一些经典案例会经常用的JSON库 —— Arduino_JSON库(名字看起来挺像的)。

2.JSON基础介绍

2.1 什么是Json?

  • Json 指的是JavaScript对象表示法(JavaScript Object Notation)。
  • Json 是轻量级的文本数据交换格式,类似于XML,比XML更小、更快,更容易解析。
  • Json 独立于语言。
  • Json 具有自我描述性,容易理解。

2.2 具体使用例子

2.2.1 JSON对象例子

JSON对象描述

{
    "motor": {
        "left": 100,
        "right": 20
    },
    "servo": {
        "servo_1": 90
    }
}

JSON对象语法说明

  • 这里分别有两个对象(对象是用{}区分),对象分别是motor、servo。
  • 对于对象motor来说,有两个字段 left 和 right,它们的值类型是int型,值分别是100和20;
  • 对于对象servo来说,有一个字段servo_1,它的值类型是int型,值是90。

2.2.2 JSON对象数组

JSON数组描述

{
    "employees": [
        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        },
        {
            "firstName": "Thomas",
            "lastName": "Carter"
        }
    ]
}

JSON数组语法说明

  • 这里有一个对象数组(数组用[]区分)employees。
  • 每个对象里面有两个字段firstName和lastName,它们的值类型都是String。

重点

  • 无论是JSON对象还是JSON数组,它们的核心都是键值对,也就是key-value形式。

3.Arduino_JSON库

  • github地址

https://github.com/arduino-libraries/Arduino_JSON
在这里插入图片描述
说明文档也极其简介,就基于cJSON库。

  • 安装
    在这里插入图片描述
  • 源码目录
    在这里插入图片描述

对于开发者来说有三个概念是共通的:

  • JsonObject —— json对象(存储key-value键值对的集合,每一个key是一个字符串,每一个value是一个JsonVariant)
  • JsonArray —— json对象数组(存储一个JsonVariant的数组)
  • JsonVariant —— json变体(存储可以放在json文件中的任意类型数据,包括int,float,数组,对象,开发者可以认为它是一个抽象的对象概念,底层内容,读者理解即可)

除了理解上面的三个概念,博主认为读者还必须注意以下两点:

  • 构造json数据,一定是从最外层开始构造,从外到里一层层构造
  • 解析json数据,虽然是交给Arduino_JSON库处理,但是我们获取数据也是从最外层开始获取,从外到里一层层获取

接下来,我们看看官方提供的几个案例。

3.1 JSONObject

/*
  JSON Object

  This sketch demonstrates how to use various features
  of the Official Arduino_JSON library, in particular for JSON objects.

  This example code is in the public domain.
*/

#include <Arduino_JSON.h>
#include <assert.h>

const char input[] = "{\"result\":true,\"count\":42,\"foo\":\"bar\"}";

void setup() {
  Serial.begin(9600);
  while (!Serial);

  demoParse();

  demoCreation();
}

void loop() {
}

// 演示如何解析json内容
void demoParse() {
  Serial.println("parse");
  Serial.println("=====");

  // 解析成一个Json对象
  JSONVar myObject = JSON.parse(input);

  // JSON.typeof(jsonVar) can be used to get the type of the variable
  // 如果发现Json Type是 undefined,说明是非JSON对象
  if (JSON.typeof(myObject) == "undefined") {
    Serial.println("Parsing input failed!");
    return;
  }

  Serial.print("JSON.typeof(myObject) = ");
  // 打印对象类型
  Serial.println(JSON.typeof(myObject)); // prints: object

  // myObject.hasOwnProperty(key) checks if the object contains an entry for key
  // 判断JSON对象是否存在某一个key
  if (myObject.hasOwnProperty("result")) {
    Serial.print("myObject[\"result\"] = ");
    Serial.println((bool) myObject["result"]);
  }

  if (myObject.hasOwnProperty("count")) {
    Serial.print("myObject[\"count\"] = ");
    Serial.println((int) myObject["count"]);
  }

  if (myObject.hasOwnProperty("count")) {
    Serial.print("myObject[\"count\"] = ");
    Serial.println((double) myObject["count"]);
  }

  if (myObject.hasOwnProperty("foo")) {
    Serial.print("myObject[\"foo\"] = ");
    Serial.println((const char*) myObject["foo"]);
  }

  // JSONVars can be printed using print or println
  Serial.print("myObject = ");
  Serial.println(myObject);

  Serial.println();
}

// 演示如何构建json对象
void demoCreation() {
  Serial.println("creation");
  Serial.println("========");

  JSONVar myObject;

  myObject["hello"] = "world";
  myObject["true"] = true;

  myObject["x1"] = (int) 42;
  myObject["x2"] = (long) 42;
  myObject["x3"] = (unsigned long) 42;

  int x1 = myObject["x1"];
  assert(x1 == 42);
  
  long x2 = myObject["x2"];
  assert(x2 == 42);

  unsigned long x3 = myObject["x3"];
  assert(x3 == 42);

  Serial.print("myObject.keys() = ");
  Serial.println(myObject.keys());

  // JSON.stringify(myVar) can be used to convert the JSONVar to a String
  // 把json对象转成字符串
  String jsonString = JSON.stringify(myObject);

  Serial.print("JSON.stringify(myObject) = ");
  Serial.println(jsonString);

  Serial.println();

  // myObject.keys() can be used to get an array of all the keys in the object
  // 获取json对象所有的key
  JSONVar keys = myObject.keys();

  // 遍历所有的key对应的value
  for (int i = 0; i < keys.length(); i++) {
    JSONVar value = myObject[keys[i]];

    //  打印对应的类型和值
    Serial.print("JSON.typeof(myObject[");
    Serial.print(keys[i]);
    Serial.print("]) = ");
    Serial.println(JSON.typeof(value));

    Serial.print("myObject[");
    Serial.print(keys[i]);
    Serial.print("] = ");
    Serial.println(value);

    Serial.println();
  }

  Serial.println();

  // setting a value to undefined can remove it from the object
  myObject["x"] = undefined;

  // you can also change a value
  myObject["hello"] = "there!";

  Serial.print("myObject = ");
  Serial.println(myObject);
}

关注几个api即可:

  • JSON.parse
  • JSON.typeof
  • hasOwnProperty
  • keys
  • JSON.stringify

3.2 JSONArray

/*
  JSON Array

  This sketch demonstrates how to use various features
  of the Official Arduino_JSON library, in particular for JSON arrays.

  This example code is in the public domain.
*/

#include <Arduino_JSON.h>

const char input[] = "[true, 42, \"apple\"]";

void setup() {
  Serial.begin(9600);
  while (!Serial);

  demoParse();

  demoCreation();
}

void loop() {
}

// 演示如何解析json数组
void demoParse() {
  Serial.println("parse");
  Serial.println("=====");

  JSONVar myArray = JSON.parse(input);

  // JSON.typeof(jsonVar) can be used to get the type of the variable
  if (JSON.typeof(myArray) == "undefined") {
    Serial.println("Parsing input failed!");
    return;
  }

  Serial.print("JSON.typeof(myArray) = ");
  Serial.println(JSON.typeof(myArray)); // prints: array

  // myArray.length() can be used to get the length of the array
  Serial.print("myArray.length() = ");
  Serial.println(myArray.length());
  Serial.println();

  Serial.print("JSON.typeof(myArray[0]) = ");
  Serial.println(JSON.typeof(myArray[0]));

  Serial.print("myArray[0] = ");
  Serial.println(myArray[0]);
  Serial.println();

  Serial.print("myArray[1] = ");
  Serial.println((int) myArray[1]);
  Serial.println();

  Serial.print("myArray[2] = ");
  Serial.println((const char*) myArray[2]);
  Serial.println();

  Serial.println();
}

// 演示如何构建json数组
void demoCreation() {
  Serial.println("creation");
  Serial.println("========");

  JSONVar myArray;
  
  myArray[0] = false;
  myArray[1] = 4242.5;
  myArray[2] = "orange";
  myArray[3] = "world";
  myArray[4] = true;
  myArray[5] = 42;

  Serial.print("myArray.length() = ");
  Serial.println(myArray.length());

  // JSON.stringify(myVar) can be used to convert the JSONVar to a String
  // 把json数组转成字符串
  String jsonString = JSON.stringify(myArray);

  Serial.print("JSON.stringify(myArray) = ");
  Serial.println(jsonString);
  Serial.println();

  for (int i = 0; i < myArray.length(); i++) {
    JSONVar value = myArray[i];

    Serial.print("JSON.typeof(myArray[");
    Serial.print(i);
    Serial.print("]) = ");
    Serial.println(JSON.typeof(value));

    Serial.print("myArray[");
    Serial.print(i);
    Serial.print("] = ");
    Serial.println(value);

    Serial.println();
  }

  Serial.println();
}

关注几个api即可:

  • JSON.parse
  • JSON.typeof
  • length
  • JSON.stringify

3.3 JSONKitchenSink

/*
  JSON Kitchen Sink

  This sketch demonstrates how to use various features
  of the Official Arduino_JSON library.

  This example code is in the public domain.
*/

#include <Arduino_JSON.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  // 以下代码主要是针对不同类型进行构建测试
  // 分别是: boolean int double string array object
  booleanDemo();

  intDemo();

  doubleDemo();

  stringDemo();

  arrayDemo();

  objectDemo();
}

void loop() {
}

void booleanDemo() {
  Serial.println("boolean");
  Serial.println("=======");

  JSONVar myBoolean = true;

  Serial.print("JSON.typeof(myBoolean) = ");
  // 打印类型
  Serial.println(JSON.typeof(myBoolean)); // prints: boolean

  Serial.print("myBoolean = ");
  Serial.println(myBoolean); // prints: true

  myBoolean = false;

  Serial.print("myBoolean = ");
  Serial.println((boolean) myBoolean); // prints: 0

  Serial.println();
}

void intDemo() {
  Serial.println("int");
  Serial.println("===");

  JSONVar myInt = 42;

  Serial.print("JSON.typeof(myInt) = ");
  Serial.println(JSON.typeof(myInt)); // prints: number

  Serial.print("myInt = ");
  Serial.println(myInt); // prints: 42

  myInt = 4242;

  Serial.print("myInt = ");
  Serial.println((int) myInt); // prints: 4242

  Serial.println();
}

void doubleDemo() {
  Serial.println("double");
  Serial.println("======");

  JSONVar myDouble = 42.5;

  Serial.print("JSON.typeof(myDouble) = ");
  Serial.println(JSON.typeof(myDouble)); // prints: number

  Serial.print("myDouble = ");
  Serial.println(myDouble); // prints: 42.5

  myDouble = 4242.4242;

  Serial.print("myDouble = ");
  Serial.println((double) myDouble, 4); // prints: 4242.4242

  Serial.println();
}

void stringDemo() {
  Serial.println("string");
  Serial.println("======");

  JSONVar myString = "Hello World!";

  Serial.print("JSON.typeof(myString) = ");
  Serial.println(JSON.typeof(myString)); // prints: string

  Serial.print("myString = ");
  Serial.println(myString); // prints: Hello World!

  myString = ":)";

  Serial.print("myString = ");
  Serial.println((const char*) myString); // prints: :)

  Serial.println();
}

void arrayDemo() {
  Serial.println("array");
  Serial.println("=====");

  JSONVar myArray;

  myArray[0] = 42;

  Serial.print("JSON.typeof(myArray) = ");
  Serial.println(JSON.typeof(myArray)); // prints: array

  Serial.print("myArray = ");
  Serial.println(myArray); // prints: [42]

  Serial.print("myArray[0] = ");
  Serial.println((int)myArray[0]); // prints: 42

  myArray[1] = 42.5;

  Serial.print("myArray = ");
  Serial.println(myArray); // prints: [42,42.5]

  Serial.print("myArray[1] = ");
  Serial.println((double)myArray[1]); // prints: 42.50

  Serial.println();
}

void objectDemo() {
  Serial.println("object");
  Serial.println("======");

  JSONVar myObject;

  myObject["foo"] = "bar";

  Serial.print("JSON.typeof(myObject) = ");
  Serial.println(JSON.typeof(myObject)); // prints: object

  Serial.print("myObject.keys() = ");
  Serial.println(myObject.keys()); // prints: ["foo"]

  Serial.print("myObject = ");
  Serial.println(myObject); // prints: {"foo":"bar"}

  myObject["blah"]["abc"] = 42;

  Serial.print("myObject.keys() = ");
  Serial.println(myObject.keys()); // prints: ["foo","blah"]

  Serial.print("myObject = ");
  Serial.println(myObject); // prints: {"foo":"bar","blah":{"abc":42}}
}

关注几个api即可:

  • JSON.typeof
  • keys
  • JSON.stringify

3.4 JSONValueExtractor

/*
  JSON Value Extractor

  This sketch demonstrates how to use some features
  of the Official Arduino JSON library to traverse through all the
  key value pair in the object and the nested objects.
  Can be very helpful when searching for a specific data in a key
  which is nested at multiple levels
  The sketch actually use recursion to traverse all the keys in
  a given JSON.

  Example originally added on 24-03-2020
  by Madhur Dixit https://github.com/Chester-King

  This example code is in the public domain.
*/

#include <Arduino_JSON.h>

void setup() {

  Serial.begin(9600);
  while (!Serial);
  valueExtractor();

}

void loop() {
}

void valueExtractor() {

  Serial.println("object");
  Serial.println("======");
  JSONVar myObject;

  // Making a JSON Object
  myObject["foo"] = "bar";
  myObject["blah"]["abc"] = 42;
  myObject["blah"]["efg"] = "pod";
  myObject["blah"]["cde"]["pan1"] = "King";
  myObject["blah"]["cde"]["pan2"] = 3.14;
  myObject["jok"]["hij"] = "bar";

  Serial.println(myObject);
  Serial.println();
  Serial.println("Extracted Values");
  Serial.println("======");

  objRec(myObject);

}

// 对json对象解析递归展示value值,一般用来解析不知道结构的json对象
void objRec(JSONVar myObject) {
  Serial.println("{");
  for (int x = 0; x < myObject.keys().length(); x++) {
    // 如果是对象就继续遍历
    if ((JSON.typeof(myObject[myObject.keys()[x]])).equals("object")) {
      Serial.print(myObject.keys()[x]);
      Serial.println(" : ");
      objRec(myObject[myObject.keys()[x]]);
    }
    else {
      Serial.print(myObject.keys()[x]);
      Serial.print(" : ");
      Serial.println(myObject[myObject.keys()[x]]);
    }
  }
  Serial.println("}");
}

这个场景主要是用来递归变量json对象属性值。

关注几个api即可:

  • JSON.typeof
  • keys
  • JSON.stringify

4. 核心API

通过上面的一些案例,我们可以得到几个最常见的核心api函数。

4.1 JSON.parse —— 解析字符串内容

  static JSONVar parse(const char* s);
  static JSONVar parse(const String& s);

这个方法主要是用来解析字符串内容。一般会结合 JSON.typeof 使用。

4.2 JSON.typeof —— 判断类型

String typeof(const JSONVar& value);

返回以下字符串:

  • boolean
  • int
  • double
  • string
  • array
  • object
  • undefined - 表示非法对象

4.3 hasOwnProperty —— 是否存在某一个属性

  bool hasOwnProperty(const char* key) const;
  bool hasOwnProperty(const String& key) const;

额外,还可以判断是否等于某一个值

  bool hasPropertyEqual(const char* key,  const char* value) const;  
  bool hasPropertyEqual(const char* key,  const JSONVar& value) const;  
  bool hasPropertyEqual(const String& key,  const String& value) const;  
  bool hasPropertyEqual(const String& key,  const JSONVar& value) const;

4.4 length —— 用于判断数组长度

int length() const;

4.5 keys —— 用于判断object的属性

JSONVar keys() const;

4.6 JSON.stringify —— 把json转成字符串

String stringify(const JSONVar& value);

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

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

相关文章

闲置宽带的用处你知道吗

随着我们生活水平的提高以及国家对信息化建设的推动&#xff0c;大部分家庭的宽带已经进入了高速时代&#xff0c;100-200M到处可见&#xff0c;甚至于500M也不是什么新鲜事儿了&#xff0c;宽带的速率是提高了&#xff0c;不过问题也来了&#xff0c;你家的宽带是否物尽所用&a…

干货分享 | TSMaster图形模块功能详解(一)—— 以CAN信号为例

“ 本文目录&#xff1a; 1、信号的导入与删除 1.1 CAN信号的导入 1.2 添加系统变量 1.3 自定义信号 1.4 信号的删除 1.5 清除信号数据 2、图形分栏 2.1 添加分栏 2.2 平均分配分栏高度 2.3 分栏上移与下移 2.4 删除分栏 3、暂停与启动和禁止图形 4、高亮信号相关操…

uview中的常用的框

第一步&#xff1a; 先下载 uview UI 框架 详见 项目 引入 uView_vue引入uview_qq_2524963996的博客-CSDN博客【代码】 项目 引入 uView。_vue引入uviewhttps://blog.csdn.net/qq_44161703/article/details/131168976?spm1001.2014.3001.5501 第二步&#xff1a; 可以直接…

mongodb mongoose 数据库增删改查基本操作

mongodb 5.0.19 下载 下载地址 安装到 C:\Program Files c盘新建 C:\data\db 找到 bin 目录(C:\Program Files\mongodb-windows-x86_64-5.0.19\mongodb-win32-x86_64-windows-5.0.19\bin) 打开cmd 输入 mongod 命令 启动数据库 再打开一个 cmd 窗口执行 mongo 命令&am…

5分钟搞懂池化的本质

大家好啊&#xff0c;我是董董灿&#xff01; 在很多与计算机视觉相关的神经网络中&#xff0c;我们往往都会看到池化这一算法&#xff0c;它一般跟在卷积层后面。 神经网络中用到最多的池化方式无外乎是最大池化和平均池化。两者运算接近&#xff0c;区别在于是在kernel范围…

Labelme制作COCO格式的图像语义分割数据集

1.按照labelme工具地址先配置安装labelme&#xff1a;GitHub - wkentaro/labelme: Image Polygonal Annotation with Python (polygon, rectangle, circle, line, point and image-level flag annotation). 2.给自己的数据集画多边形框-Create Polygons 每张图像画完框后&#…

基于GPT4模型编写基于flask和mysql的web网站教程

目录 一、基于GPT4网络模型编写网站代码编写 三.效果1 首页2 登陆&#xff1a;3 注册4 数据库 项目地址 &#xff1a;https://download.csdn.net/download/u014541881/88098143 一、基于GPT4网络模型编写网站 代码编写 我&#xff1a;请你帮我用flask写一个网站&#xff0c;…

Qt编程基础 | 第八章-QtDesigner | 8.2、布局管理器

一、布局管理器 使用Qt Designder进行控件布局时&#xff0c;经常会使用到布局管理器&#xff0c;下面介绍常用的属性 1、layoutStretch 设置控件的伸缩因子&#xff0c;如果这个值是0&#xff0c;将采用控件的大小将采用自身的sizePolicy。下面是一个具体的实例&#xff0c;界…

【雕爷学编程】Arduino动手做(87)---ULN2003步进电机模组3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

百模大战:AI大模型的现状与发展

马斯克&#xff08;Elon Musk&#xff09;是一位著名的企业家和科技创新者&#xff0c;他是特斯拉汽车公司的创始人和首席执行官&#xff0c;也是SpaceX航天公司和SolarCity太阳能公司的创始人之一。他还参与了创办OpenAI人工智能研究实验室和Neuralink脑机接口公司。 马斯克以…

任务的创建与删除

Q: 什么是任务&#xff1f; A: 任务可以理解为进程/线程&#xff0c;创建一个任务&#xff0c;就会在内存开辟一个空间。 比如&#xff1a; 玩游戏&#xff0c;打篮球&#xff0c;开车&#xff0c;都可以视为任务。 Windows 系统中的 MarkText 、谷歌浏览器、记事本&#xff0…

基于ChatGPT聊天的零样本信息提取7.25

基于ChatGPT聊天的零样本信息提取 摘要介绍ChatIE用于零样本IE的多轮 QA 实验总结 摘要 零样本信息提取&#xff08;IE&#xff09;旨在从未注释的文本中构建IE系统。由于很少涉及人类干预&#xff0c;因此具有挑战性。 零样本IE减少了数据标记所需的时间和工作量。最近对大型…

TextDetMetric: 计算文本检测算法指标工具

Text Detect Metric 该库用于计算Precision、Recall和H-mean三个指标&#xff0c;用来评测文本检测算法效果。与魔搭-文本检测测试集配套使用。指标计算代码参考&#xff1a;PaddleOCR 和 DB 整体框架 #mermaid-svg-9uGq5YvkFv9Qoswh {font-family:"trebuchet ms",v…

账号列表的删除编辑提交

<template><div><plan title"账号列表"><!-- selection-change"handleSelectionChange"添加这个属性就是点击可以得到你想要的value值 --><el-tablestyle"width: 100%":data"list"selection-change"h…

Service Mesh之Istio基础入门

技术背景 分布式服务治理 所谓分布式服务治理就是对服务不断增长的复杂度的管控和管理&#xff1b;管控及管理包含网络拓扑变动、网络延时、通信安全、API网关、服务注册和发现、服务熔断容错、服务超时重试、服务部署、数据调用、分布式链路追踪等等&#xff1b; 服务治理历程…

JMeter(八):响应断言详解

响应断言 :对服务器的响应进行断言校验 (1)应用范围: main sample and sub sample, main sample only , sub-sample only , jmeter variable 关于应用范围,我们大多数勾选“main sample only” 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,…

Linux6.14 Docker Compose容器编排

文章目录 计算机系统5G云计算第四章 LINUX Docker Compose容器编排一、Compose概述1.Docker Compose 的概述2.Docker Compose 三大的概念 二、部署过程1.Docker Compose 环境安装2.YAML 文件格式及编写注意事项3.Docker Compose配置常用字段4.Docker Compose 常用命令5.Docker …

【C语言】常见的内存操作函数

目录 前言&#xff1a;1.memcpymemcpy函数介绍memcpy函数的模拟实现 2.memmovememmove函数介绍memmove函数的模拟实现 3.memcmp4.memset 前言&#xff1a; 紧接字符串函数&#xff0c;接下来介绍内存函数~~ ———————————————————— 1.memcpy memcpy函数介…

索尼移动硬盘数据丢失怎么办?索尼移动硬盘如何恢复数据

咨询案例&#xff1a;“我刚买的索尼移动硬盘&#xff0c;里面存了超多我的宝贝照片和视频。突然有一天&#xff0c;我发现这些数据全都不见了&#xff01;心凉了半截&#xff0c;我该怎么办&#xff1f;” ——索尼移动硬盘是一种常用的存储设备&#xff0c;它具有大容量、便携…

微软亚研院提出模型基础架构RetNet或将成为Transformer有力继承者

作为全新的神经网络架构&#xff0c;RetNet 同时实现了良好的扩展结果、并行训练、低成本部署和高效推理。这些特性将使 RetNet 有可能成为继 Transformer 之后大语言模型基础网络架构的有力继承者。实验数据也显示&#xff0c;在语言建模任务上&#xff1a; RetNet 可以达到与…