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

news2024/11/17 17:22:40

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* pDest

unsigned 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);        //数据长度为5
 
	return 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);        //数据长度为6


	unsigned 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);
 

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

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

相关文章

聊聊精益需求的产生过程

这是鼎叔的第七十八篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。本人新书《无测试组织-测试团队的敏捷转型》​​​​​​​​​​​​​​已出版&#xff…

Python中if not使用教程

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 python中判断变量是否为None三种写法&#xff1a; 1、if x is None 2、if not x 3、if not x is None 理解成 if not (x is None) 结果是和1相反的 python中None、fals…

AST反混淆实战|某国外混淆框架一小段混淆js还原分析

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1. 需求 我相信做币圈爬虫的兄弟&#xff0c;或多或少的见过类似下面的…

触想五代强固型工业一体机在近海船舶上的应用

1、行业发展背景 近海船舶的发展紧密关联着海上运输、渔业贸易、旅游开发、能源探测等多领域&#xff0c;带动区域经济、文化繁荣发展。 随着现代科学与信息技术在各行各业的作用增强&#xff0c;工业4.0带动的产业升级逐步渗透进船舶领域&#xff0c;在此背景下&#xff0c;船…

【网络安全 --- xss-labs靶场通关(1-10关)】详细的xss-labs靶场通关思路及技巧讲解,让你对xss漏洞的理解更深刻

靶场安装&#xff1a; 靶场安装请参考以下博客&#xff0c;既详细有提供工具&#xff1a; 【网络安全 --- xss-labs靶场】xss-labs靶场安装详细教程&#xff0c;让你巩固对xss漏洞的理解及绕过技巧和方法&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- xss-labs通…

基于SSM的社区物业管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

C++前缀和算法的应用:从仓库到码头运输箱子原理、源码、测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 双指针 单调双向队列 题目 你有一辆货运卡车&#xff0c;你需要用这一辆车把一些箱子从仓库运送到码头。这辆卡车每次运输有 箱子数目的限制 和 总重量的限制 。 给你…

【Git】idea提交项目到Gitee

文章目录 1. 创建Gitee仓库1. 新建仓库2. 添加描述3. 复制仓库地址 2. idea建立连接提交2.1 Create Git Repository2.2 选择要提交的根目录2.3 Commit2.4 Push2.5 提交成功 1. 创建Gitee仓库 1. 新建仓库 2. 添加描述 3. 复制仓库地址 点击右上角克隆/下载&#xff0c;复制HT…

bitbucket.org 用法

这个网站需要魔法&#xff0c;注册完成后添加厂库时间2023.10 图1 图2 第二张图 &#xff0c;不要.gitignore文件 sourcetree 1,创建前端项目 npm create vitelatest 2.打开vscode创建本地Git 看到Git代提交的文件 sourcetree&#xff0c;新建 已存在的本地厂库 提交到Git 添…

CSRF Token为什么写在Cookie中?CSRF漏洞分析

1. 什么是CSRF&#xff1f; CSRF或XSRF&#xff0c;跨站请求伪造。简单地说&#xff0c;就是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作&#xff08;如发邮件&#xff0c;发消息&#xff0c;甚至财产操作如转账和购买商品&#xff…

Java - 多进程编程(对比线程、API 操作)

目录 一、多进程编程 1.1、为什么要使用多进程编程 1.2、Java 中多进程编程的实现 1.2.1、前言 1.2.2、进程创建 1.2.3、进程等待 1.2.4、封装操作到一个工具类中 一、多进程编程 1.1、为什么要使用多进程编程 一个 .exe 文件执行以后&#xff0c;就会变成一个进程. 多…

高质量发展新引擎:智能工业操作系统助力产业升级

工业操作系统是推动制造业高质量发展的重要支撑&#xff0c;也是推动经济发展方式转变的重要手段。打造自主可控的工业实时操作系统是实现工业科技自立自强的必然要求&#xff0c;是推动高质量发展的必由之路。 基于软件定义控制的智能工业操作系统 Intewell操作系统是由科东…

【技术番外篇】国家高新技术企业 认定

第一个网站&#xff1a;高新技术企业认定管理工作网 http://www.innocom.gov.cn/gqrdw/index.shtml 多给认定机构打咨询电话&#xff0c;少走弯路 有什么不懂的地方就可以打电话咨询专业人士 http://www.innocom.gov.cn/gqrdw/c101321/201905/3b94fbc91a894bcbba97fb7125c9…

【ChatGLM2-6B】nginx转发配置

背景 好不容易把ChatGLM2-6B大语言模型部署好了&#xff0c;使用streamlit方式启动起来了&#xff0c;终于可以愉快的玩耍了&#xff0c;然后想着申请一个域名&#xff0c;使用HTTPS协议访问&#xff0c;但实践过程中&#xff0c;发现这个大语言模型的nginx转发配置还是有点小…

Swingbench 压力测试(超详细)

目录 前提需要有配置好的oracle哦 1、环境准备 2、安装Swingbench 3、造数据 4、压测 前提需要有配置好的oracle哦 1、环境准备 启动监听 lsnrctl start 启动数据库 sqlplus / as sysdba startup 创建表 CREATE TABLESPACE soe DATAFILE /u01/app/oracle/oradata/or…

重生奇迹MU游戏上格斗家挂机小技巧

重生奇迹MU作为一个独特的职业&#xff0c;重生奇迹MU游戏中的格斗家有着多种挂机技巧&#xff0c;以下是一些重生奇迹MU格斗家挂机小技巧供玩家参考&#xff1a; 1.使用幽冥光速拳 幽冥光速拳是格斗家的核心技能之一&#xff0c;可以快速消灭怪物并提高经验值。建议玩家将此…

【PX4报错】Crash dumps present on SD,vehicle needs service

报错&#xff1a; Critical: Preflight Fail: Crash dumps present on SD,vehicle needs service 解决&#xff1a; 将COM_ARM_HFLT_CHECK改为Disabled 参考&#xff1a; PX4常见解锁失败报错及解决方法

PCA降维可视化

二维 import pandas as pd import warnings warnings.filterwarnings("ignore")df pd.read_csv(data/data.csv).dropna() features df.columns[:-1] X, y df[features], df[label]from sklearn.preprocessing import MinMaxScaler # 创建MinMaxScaler对象 scaler…

论坛介绍|COSCon'23 大数据(D)

众多开源爱好者翘首期盼的开源盛会&#xff1a;第八届中国开源年会&#xff08;COSCon23&#xff09;将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01;各位新老朋友们&#xff0c;欢迎到成都&a…

柯桥银泰附近有学德语的地方吗,留学德语培训

01 die Garantiefr jemandem/etwas 给某人或某事的保障 Das System bietet die Garantie fr die Bauer. 02 der Gebrauch von etwas 使用某物 Wir haben den Gebrauch vom Computer gelerbt. 我们学会了使用电脑。 03 Die Geduld mit jemandem/etwas 对..的耐心 Der Lehre…