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

C++-json(2)-unsigned char-unsigned char*-memcpy-strcpy-sizeof-strlen

1.类型转换:

//1.赋值一个不知道长度的字符串unsigned char s[] = "kobe8llJfFwFSPiy";                 //1.用一个字符串初始化变量
unsigned int s_length = strlen((char*)s);               //2.获取字符串长度//2.字符串里有双引号"" 需要加\   长度数据类型:size_t
const  unsigned char sjson[] = "{\"name\":\"MABMEC3F8\", \"value\" : \"W6tvvyYEF7ZkFH8V\" }"; 
size_t sjson_length = strlen((char*)sjson);//3.两个 unsigned char*之间的拷贝:unsigned char* pSrc, unsigned char* pDestunsigned char* pSrc="ABC123";
size_t npSrclen =strlen((char*)pSrc);
unsigned char* pDest=new unsigned char[npSrclen];
memcpy(pDest, pSrc, npSrclen);

//1.static_cast      相近类型#include<iostream>
using namespace std;int main()
{double d = 12.34;int a = static_cast<int>(d);return 0;
}//2.reinterpret_cast 不相关类型
typedef void(*FUNC) ();int DoSomething(int i)
{cout << "DoSomething" << endl;return 0;
}
int main()
{
//reinterpret_cast可以让编译器以FUNC的定义方式去看待DoSomething函数
//所以非常的BUG,下面的转换函数指针的代码时不可移植的,所以不建议使用
//C++不保证所有的函数指针都被一样使用,所以这样用有时会产生不确定的结果FUNC f = reinterpret_cast<FUNC>(DoSomething);f();system("pause");return 0;
}//3.const_cast  删除变量的const属性
int main()
{volatile const int a = 2;int* p = const_cast<int*>(&a);*p = 3;cout << a << endl;system("pause");return 0;
}//4.explicit关键字阻止转换构造函数进行的隐式类型转换的发生
class A
{
public:explicit A(int a){cout << "A(int a)" << endl;}A(const A* a){cout << "const A* a" << endl;}
private:int _a;
};
int main()
{A a1(1);  //隐式转换--A tmp(1); A a2(tmp)A a2 = 1;system("pause");return 0;
}

int main()
{unsigned char data[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64};int len = sizeof(data) / sizeof(unsigned char);string str(data, data+len);return 0;
}

3.  拷贝 一定要new 

    错误的:

//1. 不new
unsigned char* pSrc1 = (unsigned char*)(s_data_offset_.c_str());
int  Srclen1 = strlen((char*)pSrc1);
unsigned char pcopy1[] = { 0 };      
memcpy(pcopy1, pSrc1, Srclen1 );      //debug 显示字符串中的字符无效  
int  copy1len = strlen((char*)pcopy1); //长度   24个  0x18  //3.去掉后面的字符串unsigned char*  pcopy3 = mytrim(pcopy2, Srclen2);size_t copy3len = strlen((char*)pcopy3);

正确的:

//2.new  
unsigned char* pSrc2 = (unsigned char*)(s_data_offset_.c_str());
int Srclen2 = strlen((char*)pSrc2);
unsigned char* pcopy2 = new unsigned char[Srclen2];  //长度  
memcpy(pcopy2, pSrc2, Srclen2 );                     //pcopy2 显示 pSrc中的字符
size_t copy2len = strlen((char*)pcopy2);


 

4.copy 出来的是有空字符串的
            去掉空字符串

 //3.去掉  原始的是16-实际的是21 相差5个//字符串去空格
unsigned char* mytrim(unsigned char* pSrc, int pSrcLen)
{unsigned char* copy = (unsigned char*)malloc(pSrcLen);memset(copy, 0, pSrcLen);unsigned int i = 0, j = 0;for (i = 0; i < pSrcLen; i++){if (pSrc[i] != ' '){copy[j++] = pSrc[i];}}copy[j] = '\0';int  strCopy2len = strlen((char*)copy);return copy;
}

5.数据长度 最后一个字符一定要是'\0'

strlen() 只有遇到'\0'才会停止计算,同时计算的长度不包含'\0',否则就是个随机值

#include <stdio.h>
#include <string.h>//当计算长度时,只有遇到'\0'才会停止计算,同时计算的长度不包含'\0'。
int main()
{char arr[10] = "abcde";int num = strlen(arr);printf("数组arr的长度为:%d\n", num);        //数据长度为5return 0;
}int main()
{char arr[] = { 'a','b','c','d','e' };int num = strlen(arr);printf("数组arr的长度:%d\n", num);         //数据长度为 19 此处返回的是一个随机值return 0;
}

sizeof

#include <stdio.h>
#include <string.h>//字符串长度默认+1   最后一个 "\0"
int main()
{unsigned char  arr1[] = "abcde";int num1 = sizeof(arr1);printf("数组arr1的长度为:%d\n", num1);        //数据长度为6unsigned char arr2[] = { 'a','b','c','d','e' };int num2 = sizeof(arr2);printf("数组arr2的长度:%d\n", num2);         //数据长度为5 return 0;
}


对于  unsigned char* p     长度用 strlen((char*) p)
对于  unsigned char arr[]  长度用 sizeof(arr) 

6.memcpy和strcpy

 1.strcpy仅仅只能复制字符串,但是memcpy却可以复制所有的类型。
 2.strcpy复制字符串的时候,什么时候结束是依赖于source处字符串的’\0’来决定的。但是memcpy复制的时候,复制多少个字节是采用第三个参数来决定的。


 

int main()
{char data[256];memcpy(data, "12345", 5);cout << data << endl;strcpy(data, "6789");cout << data << endl;return 0;
}

1. data 初始化为0                    memset(data,0,256);
2. memcpy时把最后一个\0 复制过去  memcpy(data,"12345",6);
 

相关文章:

C++-json(2)-unsigned char-unsigned char*-memcpy-strcpy-sizeof-strlen

1.类型转换&#xff1a; //1.赋值一个不知道长度的字符串unsigned char s[] "kobe8llJfFwFSPiy"; //1.用一个字符串初始化变量 unsigned int s_length strlen((char*)s); //2.获取字符串长度//2.字符串里有双引号"" 需要…...

python安装第三方包

1 命令行下载 pip install 包名称 进入命令行输入该命令 由于pip是连接的国外的网站进行包的下载&#xff0c;所以有的时候会速度很慢。 我们可以通过如下命令&#xff0c;让其连接国内的网站进行包的安装&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/s…...

《数据结构、算法与应用C++语言描述》-队列的应用-电路布线问题

《数据结构、算法与应用C语言描述》-队列的应用-电路布线问题 问题描述 在 迷宫老鼠问题中&#xff0c;可以寻找从迷宫入口到迷宫出口的一条最短路径。这种在网格中寻找最短路径的算法有许多应用。例如&#xff0c;在电路布线问题的求解中&#xff0c;一个常用的方法就是在布…...

GC overhead limit exceeded问题

1.问题现象 程序包运行时候发生了java.lang.OutOfMemoryError: GC overhead limit exceeded异常&#xff0c; 详细信息如下 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.jboss.util.NestedSQLException: Error; - nested t…...

What‘s new in Arana v0.2.0

Arana 定位于云原生数据库代理&#xff0c;它可以以 sidecar 模式部署为数据库服务网格&#xff0c;项目地址是 https://github.com/arana-db/arana 。Arana 提供透明的数据访问能力&#xff0c;当用户在使用时&#xff0c;可以不用关心数据库的 “分片” 细节&#xff0c;像使…...

STM32 串口接收中断被莫名关闭

使用cubeidestm32f4进行调试&#xff0c;发现UART4串口会被莫名的关掉&#xff0c;导致不能接收数据&#xff0c;经过排查如下&#xff1a; HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) {uint8_t *pd…...

接口测试vs功能测试

接口测试和功能测试的区别&#xff1a; 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做和如何做&#xff1f;并没有解释为什…...

前端面试题整理(1.0)

1.nextTick原理 Vue是异步执行Dom更新的&#xff0c;一旦观察到数据变化&#xff0c;Vue就会开启一个队列&#xff0c;然后把在同一个事件循环&#xff08;event loop&#xff09;当中观察到数据变化的Watcher推送到这个队列。如果这个Watcher被触发多次&#xff0c;智慧被推送…...

使用Spire.PDF for Python插件从PDF文件提取文字和图片信息

目录 一、Spire.PDF插件的安装 二、从PDF文件提取文字信息 三、从PDF文件提取图片信息 四、提取图片和文字信息的进阶应用 总结 在Python中&#xff0c;提取PDF文件的文字和图片信息是一种常见的需求。为了满足这个需求&#xff0c;许多开发者会选择使用Spire.PDF插件&…...

springBoot整合讯飞星火认知大模型

1.概述 讯飞星火大模型是科大讯飞最近开放的拥有跨领域的知识和语言理解能力的大模型&#xff0c;能够完成问答对话和文学创作等。由于讯飞星火大模型最近可以免费试用&#xff0c;开发者都可以免费申请一个QPS不超过2的账号&#xff0c;用来实现对平台能力的验证。本文将利用…...

JMM对数据竞争的定义

JMM对数据竞争的定义 Java内存模型规范对数据竞争的定义如下在一个线程中写一个变量&#xff0c;在另一个线程读同一个变量&#xff0c;而且写和读没有通过同步来排序。如果一个多线程程序能正确同步&#xff0c;这个程序将是一个没有数据竞争的程序。当程序未正确同步时&…...

民安智库(湖北知名满意度测评公司)食品安全满意度调查如何开展

食品安全问题一直以来都是社会各界广泛关注的焦点之一。近年来&#xff0c;食品安全事件频发&#xff0c;引起了公众的高度关注和担忧。因此&#xff0c;开展食品安全满意度调查&#xff0c;了解公众对食品安全状况的认知和满意程度&#xff0c;对于促进食品安全共建共治共享具…...

Rust 语法笔记

变量绑定&#xff08;声明变量&#xff09; let 变量名: 类型 变量值; let 变量名 变量值[类型]; // 整型 默认 i32&#xff1b;浮点 默认 f64所有的 let 绑定都必须尾接;&#xff0c;代码块也不例外。 mut 可以通过重新声明的方式来改变变量类型 可以下划线改善数字的可读…...

AI智慧安防智能监控平台如何做到健身房智能视频监控?

随着大家对健身的重视&#xff0c;健身房也开始遍地开花&#xff0c;健身房的兴起是必然的&#xff0c;但是健身房的管理不容疏忽&#xff0c;通过EasyCVR智能视频监控系统&#xff0c;则可以解决监管不足的问题。 1、安全摄像头布局 根据健身房的大小和布局&#xff0c;合理规…...

ps插件Coolorus for Mac中文激活版

Coolorus是一款非常实用的Photoshop插件&#xff0c;它为Photoshop增加了色环配色面板&#xff0c;让设计师可以更直观地选择颜色。同时&#xff0c;Coolorus还提供了多种专业配色方案&#xff0c;如鲜艳色、复古色、日常色等&#xff0c;设计师可以直接套用这些方案&#xff0…...

MySQL的索引——索引的介绍及其数据结构B+树 索引的类型 索引的使用及其失效场景 相关名词解释

前言 索引是存储引擎用于快速查找数据纪录的一种数据结构&#xff0c;索引是数据库中经常提及的一个词&#xff0c;究竟什么是索引&#xff0c;索引的数据结构是什么&#xff0c;索引有什么类型&#xff1f; 本篇博客尝试阐述数据库索引的相关内容&#xff0c;涉及什么是索引…...

第十六届中国智慧城市大会 | 国产化三维重建技术服务智慧城市建设

2023年10月13日&#xff0c;由武汉大势智慧科技有限公司、飞燕航空遥感技术有限公司主办的第十六届智慧城市大会-实景三维技术创新与应用论坛在广州成功举办。 来自实景三维、自然资源、数字孪生、AI大数据、航空遥感等多个领域的专家&#xff0c;深度分享各自的智慧城市建设经…...

通过数组的指针获得数组个数

这几天学习智能指针时,自己在练习写个管理数组指针的类时碰到了通过数组指针获取数组个数的问题 1.在网上查询了通过数组指针获取数组个数的方法,对于自定义数据在前四个节点保存了数组个数 Student* pAry new Student[3];size_t num *((size_t*)pAry - 1);//3测试是成功的…...

GeoServer改造Springboot启动四(解决post接口方法无法用@requestbody为入参的请求)

1、修改源码4 解决问题:解决Controller接口post方法(如图 19)无法用@requestbody为入参的 json数据进行请求,用swagger请求示例如图 20,具体错误呈现如图 21。 图 19Controller接口示例 图 20post接口请求示例 图 21post接...

C#,数值计算——分类与推理Phylagglomnode的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Phylagglomnode { public int mo { get; set; } public int ldau { get; set; } public int rdau { get; set; } public …...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...