C++笔记之字节数组的处理

C++笔记之字节数组的处理

code review!

文章目录

  • C++笔记之字节数组的处理
    • 1.字节数组打印
    • 2.将字节数组转换为十六进制字符串并打印
    • 3.将字符串转为字节数组
    • 4.将字节数组转为字符串
    • 5.字节数组和字符数组的区别
    • 6.字节数组用于二进制数据存储
    • 7.字节数组用于网络通信数据传输
    • 8.使用 unsigned char 来操作字节数据
    • 9.字节数组和二进制字节流
    • 10.使用memcpy和memset操作字节数组

1.字节数组打印

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iostream>
#include <vector>int main() {std::vector<unsigned char> byteArray = {0x01, 0x02, 0x03};for (unsigned char byte : byteArray) {std::cout << "Byte: " << static_cast<int>(byte) << std::endl;}return 0;
}

2.将字节数组转换为十六进制字符串并打印

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iomanip>
#include <iostream>
#include <sstream>
#include <vector>std::string ByteArrayToHexString(const std::vector<unsigned char> &byteArray) {std::stringstream ss;ss << std::hex << std::setfill('0');for (unsigned char byte : byteArray) {ss << std::setw(2) << static_cast<int>(byte);}return ss.str();
}int main() {std::vector<unsigned char> byteArray = {0x01, 0x02, 0x03};std::string hexString = ByteArrayToHexString(byteArray);std::cout << "Hex String: " << hexString << std::endl;return 0;
}

3.将字符串转为字节数组

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iostream>
#include <vector>
#include <string>int main() {std::string inputString = "Hello, Byte Data!";std::vector<unsigned char> byteArray(inputString.begin(), inputString.end());std::cout << "Byte from String: ";for (unsigned char byte : byteArray) {std::cout << static_cast<int>(byte) << " ";}std::cout << std::endl;return 0;
}

4.将字节数组转为字符串

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iostream>
#include <vector>
#include <string>int main() {std::vector<unsigned char> byteArray = {72, 101, 108, 108, 111, 44, 32, 66, 121, 116, 101, 32, 68, 97, 116, 97, 33};std::string str(byteArray.begin(), byteArray.end());std::cout << "String from Byte Array: " << str << std::endl;return 0;
}

5.字节数组和字符数组的区别

字节数组和字符数组都是一种用于存储一系列数据的数据结构,但它们在数据类型和使用上有一些区别:

  1. 数据类型:

    • 字节数组(std::vector<unsigned char>):字节数组是一个存储无符号字符(字节)的动态数组。每个元素通常代表一个字节,其取值范围是0到255。
    • 字符数组(C-style字符数组,例如char[]char*):字符数组是一组按照C字符串规则存储的字符,通常以空字符 '\0' 结尾。
  2. 数据内容:

    • 字节数组:可以存储任意字节数据,包括二进制数据和整数值的字节表示。
    • 字符数组:主要用于存储文本数据,其中每个字符表示一个文本字符。
  3. 用途:

    • 字节数组:通常用于处理二进制数据、字节流、网络通信等场景,如在通信协议中传递数据。
    • 字符数组:主要用于处理文本数据,如C语言中的字符串操作,以及在文本处理、文件读写等场景。
  4. 表示结束:

    • 字节数组:不需要以特定的值结尾,可以存储任意长度的字节数据。
    • 字符数组:通常需要以空字符 '\0' 结尾,作为字符串的结束标志。

总之,字节数组适用于处理通用的二进制数据,而字符数组主要用于处理文本数据。在C++中,字节数组可以使用std::vector<unsigned char>来表示,而字符数组可以使用C风格的字符数组(char[])或C++中的std::string来表示。

6.字节数组用于二进制数据存储

在这里插入图片描述

7.字节数组用于网络通信数据传输

在这里插入图片描述

8.使用 unsigned char 来操作字节数据

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <iostream>int main() {unsigned char byteValue = 0xAB; // 1010 1011 in binarystd::cout << "Byte Value: " << static_cast<int>(byteValue) << std::endl;// 检查特定位是否设置bool isBitSet = (byteValue & (1 << 3)) != 0;std::cout << "Bit 3 is set: " << std::boolalpha << isBitSet << std::endl;// 设置特定位byteValue |= (1 << 4); // Set bit 4std::cout << "Modified Byte Value: " << static_cast<int>(byteValue) << std::endl;return 0;
}

9.字节数组和二进制字节流

字节数组和二进制字节流都是用于存储和处理字节数据的概念,但它们可能在上下文中有不同的含义。

字节数组:

字节数组是一种数据结构,它表示一系列连续的字节。在C++中,通常使用 std::vector<unsigned char> 来表示字节数组。字节数组可以存储任意类型的字节数据,包括文本字符、整数、二进制数据等。字节数组中的每个元素通常代表一个字节,取值范围是0到255。字节数组可以用于处理通用的二进制数据,例如在网络通信、文件IO、数据序列化和反序列化等方面。

以下是一个表示字节数组的简单示例:

#include <iostream>
#include <vector>int main() {std::vector<unsigned char> byteArray = {0x41, 0x42, 0x43, 0x44};for (unsigned char byte : byteArray) {std::cout << "Byte: " << static_cast<int>(byte) << std::endl;}return 0;
}

二进制字节流:

二进制字节流是由一系列字节组成的数据流,其中每个字节可以取0到255范围内的整数值。二进制字节流通常用于在计算机系统之间传输数据,或在文件中存储数据。它主要关注数据的字节表示,而不将数据解释为文本字符。二进制字节流可以包含任何类型的数据,包括图像、音频、视频、文档等。

以下是一个简单的示例,演示了一个二进制字节流的概念:

#include <iostream>
#include <fstream>
#include <vector>int main() {std::vector<unsigned char> byteStream = {0x41, 0x42, 0x43, 0x44};std::ofstream outputFile("binary_stream.bin", std::ios::binary);if (outputFile.is_open()) {outputFile.write(reinterpret_cast<char*>(&byteStream[0]), byteStream.size());outputFile.close();std::cout << "Binary stream written to file." << std::endl;} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}

在此示例中,我们将一个字节数组写入一个二进制文件中,形成了一个二进制字节流。请注意,这只是一个简化的示例,实际应用中可能需要更多的处理和容错机制。

10.使用memcpy和memset操作字节数组

在这里插入图片描述

运行
在这里插入图片描述

代码

#include <cstring>
#include <iostream>int main() {// 创建一个源字节数组unsigned char sourceArray[] = {0x01, 0x02, 0x03, 0x04, 0x05};// 创建一个目标字节数组,与源数组大小相同unsigned char targetArray[sizeof(sourceArray)];// 使用 memcpy 拷贝数据std::memcpy(targetArray, sourceArray, sizeof(sourceArray));// 打印目标字节数组内容std::cout << "Target Array after memcpy:" << std::endl;for (unsigned char byte : targetArray) {std::cout << static_cast<int>(byte) << " ";}std::cout << std::endl;// 使用 memset 将目标字节数组填充为特定值std::memset(targetArray, 0xFF, sizeof(targetArray));// 打印目标字节数组内容std::cout << "Target Array after memset:" << std::endl;for (unsigned char byte : targetArray) {std::cout << static_cast<int>(byte) << " ";}std::cout << std::endl;return 0;
}

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

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

相关文章

uniapp+vue3+vite+pinia2.0.33项目初始化

目录 准备工作 注意事项 使用vue-cli创建项目 运行 准备工作 下载hbuild开发工具 HBuilderX-高效极客技巧 下载微信小程序开发工具 概览 | 微信开放文档 uniapp uni-app官网 注意事项 1.node.js版本>16#windows查看node版本 C:\Users\22862>node -v v18.16.0 …

【python】爬取豆瓣电影Top250(附源码)

前言 在网络爬虫的开发过程中&#xff0c;经常会遇到需要处理一些反爬机制的情况。其中之一就是网站对于频繁访问的限制&#xff0c;即IP封禁。为了绕过这种限制&#xff0c;我们可以使用代理IP来动态改变请求的来源IP地址。在本篇博客中&#xff0c;将介绍如何使用代理IP的技术…

WebRTC | 实现数据流的一对一通信

目录 一、浏览器对WebRTC的支持 二、MediaStream与MediaStreamTrack 三、RTCPeerConnection 1. RTCPeerConnection与本地音视频数据绑定 2. 媒体协商SDP 3. ICE &#xff08;1&#xff09;Candidate信息 &#xff08;2&#xff09;WebRTC收集Candidate &#xff08;3&…

搭建Docker环境

目录 一、docker环境搭建 1、卸载旧版本docker 2、安装依赖和设置仓库 3、安装docker 4、启动并加入开机启动 5、验证是否安装成功 二、利用docker搭建nginx 1、拉取镜像 2、启动容器&#xff0c;部署nginx 一、docker环境搭建 1、卸载旧版本docker yum remove docke…

【linux】2 软件管理器yum和编辑器vim

目录 1. linux软件包管理器yum 1.1 什么是软件包 1.2 关于rzsz 1.3 注意事项 1.4 查看软件包 1.5 如何安装、卸载软件 1.6 centos 7设置成国内yum源 2. linux开发工具-Linux编辑器-vim使用 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行…

[Blender]Geometry nodes altermesh to UE

首先要先下载插件 AlterMesh – Use geometry nodes inside Unreal 下载对应版本的插件后 打开UE&#xff0c;在对应的设置里面挂上blender.exe的路径 去官方下载一个Blender Geometry nodes 的示例 Demo Files — blender.org​​​​​​

Java项目-苍穹外卖-Day03

文章目录 员工分页查询功能实现需求分析和设计代码开发pageHelper底层代码完善 启用禁用员工账号功能开发需求分析 员工分页查询功能实现 需求分析和设计 代码开发 先设计类 将对应分页查询的传参类以及结果类进行封装 对应真正返回的为Result<PageResult>Controller…

电商3D产品渲染简明教程

3D 渲染让动作电影看起来更酷&#xff0c;让建筑设计变得栩栩如生&#xff0c;现在还可以帮助营销人员推广他们的产品。 从最新的《阿凡达》电影到 Spotify 的上一次营销活动&#xff0c;3D 的应用让一切变得更加美好。 在营销领域&#xff0c;3D 产品渲染可帮助品牌创建产品的…

Scratch 之 枪战的枪械画法

大家可以参考百度图片寻找到的AK-47图片&#xff1a;AK47图片 此处我以MK18作为参照&#xff0c;MK18的造型可以在资源中获取 资源链接&#xff1a;https://download.csdn.net/download/leyang0910/88136393 对于不必要的&#xff08;繁琐的&#xff09;线条&#xff0c;我们可…

分享kubernetes部署:基于Ansible自动安装kubernetes

基于Ansible自动安装kubernetes 环境准备 我们以如下机器环境为例&#xff1a; 开放端口&#xff1a; 控制平面节点 工作节点 请按如上中规定的开放端口&#xff0c;或关闭防火墙&#xff1a; systemctlstopfirewalld&&\ systemctldisablefirewalld 安装常用工具 sudo…

点亮你的第一颗Led灯

1、&#x1f4d5;前言 该系列文章用于记录个人学习stm32单片机的过程&#xff0c;全文搭配图文解说&#xff0c;零基础的萌新也能读懂&#xff0c;欢迎指导讨论~ 2、&#x1f4e6;准备材料 2.1、&#x1f4dd;硬件材料清单 面包板1块 PWLINK PowerWriter仿真器1个 杜…

Python web实战之Django 的缓存机制详解

关键词&#xff1a;Python、Web 开发、Django、缓存 1. 缓存是什么&#xff1f;为什么需要缓存&#xff1f; 在 Web 开发中&#xff0c;缓存是一种用于存储数据的临时存储区域。它可以提高应用程序的性能和响应速度&#xff0c;减轻服务器的负载。 当用户访问网页时&#xff…

STM32基于CubeIDE和HAL库 基础入门学习笔记:功能驱动与应用

文章目录&#xff1a; 一&#xff1a;LED与按键驱动程序 main.c 1.闪灯 led.h led.c 2.按键控制LED亮灭 key.h key.c 二&#xff1a;蜂鸣器与继电器驱动程序 main.c 1.蜂鸣器 buzzer.h buzzer.c delay.h delay.c 2.继电器 relay.h relay.c 三&#xff1…

Spring Boot 统一功能处理(拦截器实现用户登录权限的统一校验、统一异常返回、统一数据格式返回)

目录 1. 用户登录权限校验 1.1 最初用户登录权限效验 1.2 Spring AOP 用户统⼀登录验证 1.3 Spring 拦截器 &#xff08;1&#xff09;创建自定义拦截器 &#xff08;2&#xff09;将自定义拦截器添加到系统配置中&#xff0c;并设置拦截的规则 1.4 练习&#xff1a;登录…

腾讯云2核2g轻量应用服务器能容纳多少人?

腾讯云轻量应用服务器2核2g能容纳多少人&#xff1f;轻量应用服务器2核2g配置自带4M公网带宽&#xff0c;以网站应用为例&#xff0c;假设优化后的网页平均大小为60KB&#xff0c;2核2G4M带宽轻量服务器可以支持10个并发数&#xff0c;即同时10个人在1秒内同时打开网站&#xf…

【C++学习系列】1.小谷记账踩坑记

文章目录 前言1.基础支持2. 几个小坑2.1 为什么要用引用传值2.2 头文件的作用2.3 while true的使用和跳出 3. 未解决的问题 前言 是尚硅谷的C第一季的项目&#xff0c;我跟着敲下来了&#xff0c;发现几个坑点&#xff0c;记录下来&#xff1b; 1.基础支持 有这个则只require…

大华智慧园区综合管理平台文件上传漏洞复现(HW0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 0x02 漏洞概述 大华智慧园…

Vue+SpringBoot项目开发:登录页面美化,登录功能实现(三)

写在开始:一个搬砖程序员的随缘记录上一章写了从零开始VueSpringBoot后台管理系统&#xff1a;Vue3TypeScript项目搭建 VueTypeScript的前端项目已经搭建完成了 这一章的内容是引入element-plus和axios实现页面的布局和前后端数据的串联&#xff0c;实现一个登陆的功能&#x…

「何」到底该读「なん」还是「なに」?柯桥学日语

「何」到底该读「なん」还是「なに」&#xff1f; 首先&#xff0c;讲一个规律&#xff0c;大家记住就行。当「何」后面所接单词的第一个发音在“た”、“だ”、“な”行时&#xff0c;读作“なん”。一般这种情况下&#xff0c;后面跟的是の、でも、です和だ。 用例&#xff…

php后端实现调用高德地图进行POI搜索

对于当前位置或者选定省市位置进行查询 接口实现 /*** 查询地址* ApiTitle (查询地址)* ApiSummary (查询地址)* ApiMethod (POST)* ApiRoute (/api/demo/address)* ApiParams (name"dart", type"integer", requiredtrue, description"省…