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.rhkb.cn/news/86703.html

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

相关文章

如何创造千亿项目?合法合规的绿色消费增值积分,或许能冲出赛道

电商行业的竞争越来越激烈&#xff0c;大部分的电商平台都面临着这三大难题&#xff1a;如何吸引用户、如何留存用户以及如何让用户为平台带来更多的效益。为了解决这三大问题&#xff0c;我们提出了创造千亿项目的商业模式——绿色消费增值积分系统&#xff0c;帮助企业冲出赛…

文档控件DevExpress Office File API v23.1新版亮点 - 支持.NET MAUI

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库&#xff0c;不用安装Microsoft Office&#xff0c;就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 国内互联网大厂商入局VR&#xff0c;字节跳动、网易表态明确。字节跳动2021年收购国内头部VR硬件厂商PICO后&#xff0c;加速构建VR内容生态&#xff0c;2021年 成立海南创见未来当前已推出VR视频应用…

Docker安装 elasticsearch-head

目录 前言安装elasticsearch-head步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 也可从docker hub上搜索镜像。4. 选择合适的redis镜像。 步骤2&#xff1a;拉取elasticsearch-head镜像拉取镜像查看已拉取的镜像 步骤3&#xff1a;创建容器创建容器方式1&#…

免费实用的日记应用:Day One for Mac中文版

Day One for Mac是一款运行在Mac平台上的日记软件&#xff0c;你可以使用Day One for mac通过快速菜单栏条目、提醒系统和鼓舞人心的信息来编写更多内容&#xff0c;day one mac版还支持Dropbox同步功能&#xff0c;想要day one mac中文免费版的朋友赶紧来试试吧&#xff01; …

苍穹外卖day12笔记

一、工作台 联系昨天 要实现的功能和昨天差不多&#xff0c;都是查询数据。 所以我们就写出查询语句&#xff0c;然后直接导入已经写好的代码。 实现效果 查询语句 今日数据 营业额 select count(amount) from orders where status5 and order_time > #{begin} and …

[保研/考研机试] KY30 进制转换-大整数转二进制 清华大学复试上机题 C++实现

描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入描述&#xff1a; 多组数据&#xff0c;每行为一个长度不超过30位的十进制非负整数。 &#xff08;注意是10进制数字的个数可能有30个&#xff0c;而非30bits的整数&#xff09; 输出描述&#xff…

Visual Studio 2022安装教程(英文版)

文章目录 1.下载安装 1.下载 官网地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 选择第一个社区版本&#xff1a;Community 2022 安装 1.将下载好的文件保存到桌面&#xff0c;双击点开 2.等待visual studio installer配置好 3.点击安装后会来到配件选…

【设计模式——学习笔记】23种设计模式——中介者模式Mediator(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入案例一普通实现中介者模式 案例二 介绍基础介绍登场角色尚硅谷 《图解设计模式》 案例实现案例一&#xff1a;智能家庭类图实现 案例二&#xff1a;登录页面逻辑实现说明类图实现 总结文章说明 案例引入 案例一 普通实现 在租房过程中&#xff0c;客户可能…

c++11 标准模板(STL)(std::basic_fstream)(五)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_fstream : public std::basic_iostream<CharT, Traits> 类模板 basic_fstream 实现基于文件的流上的高层输入/输出。它将 std::basic_i…

JAVA基础补充(Comparable排序接口的实现)

JAVA基础补充&#xff08;Comparable排序接口的实现&#xff09; Comparable接口的实现&#xff1a;没有实现Comparable接口时&#xff0c;取出来的值无法排序如果进行排序&#xff1a;实现接口进行排序&#xff1a;Controller层的实现实体类的实现 复习时间&#xff1a;2023/0…

v-md-editor自定义锚点(生成目录)数组转树结构

接前两篇博文&#xff0c;最终方案终于定了&#xff0c;也把之前做的编辑器模式给否决了&#xff0c;原因是系统中有老的文档需要平替&#xff0c;因此就不能通过编辑器这种模式了&#xff0c;太麻烦了。 最终方案&#xff1a;线下手动pandoc word转markdown&#xff0c;然后将…

tidevice+appium在windows系统实施iOS自动化

之前使用iOS手机做UI自动化都是在Mac电脑上进行的&#xff0c;但是比较麻烦&#xff0c;后来看到由阿里开源的tidevice工具可以实现在windows上启动WDA&#xff0c;就准备试一下&#xff0c;记录一下过程。 tidevice的具体介绍可以参考一下这篇文章&#xff1a;tidevice 开源&…

Flutter实现倒计时功能,秒数转时分秒,然后倒计时

Flutter实现倒计时功能 发布时间&#xff1a;2023/05/12 本文实例为大家分享了Flutter实现倒计时功能的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 有一个需求&#xff0c;需要在页面进行显示倒计时&#xff0c;倒计时结束后&#xff0c;做相应的逻辑处理。 实…

GrapeCity Documents for PDF (GcPdf) 6.2 Crack

GrapeCity PDF 文档 (GcPdf) 改进了对由 GcPdf 以外的软件生成的现有 PDF 文档的处理 在新的 v6.2 版本中&#xff0c;GcPdf 增强了 PDF 文档的加载和保存&#xff0c;并提供以下优势&#xff1a; GcPdf 现在可以加载和保存可能不严格符合 PDF 规范的 PDF 文档。GcPdf 现在将…

springBoot整合RabbitMq实现手动确认消息

如何保证消息的可靠性投递&#xff1f; 1.保证生产者向broke可靠性投递&#xff0c;开启ack投递成功确认&#xff0c;如果失败的话进行消息补偿 /*** author yueF_L* date 2023-08-10 01:32* ConfirmCallback&#xff1a;消息只要被 RabbitMQ broker 接收到就会触发confirm方…

logback日志框架学习(1)介绍logback

首先说下对日志框架的感受&#xff0c;很多人slf4j-api slf4j-simple logback-core logbak-classic log4j logj42很多的日志框架&#xff0c;控制台各种输出的时候日志框架warn error&#xff0c;有时候还不能输出日志。究其原因&#xff0c;大家都觉得日志框架不太重要&#x…

NSS [UUCTF 2022 新生赛]ez_upload

NSS [UUCTF 2022 新生赛]ez_upload 考点&#xff1a;Apache解析漏洞 开题就是标准的上传框 起手式就是传入一个php文件&#xff0c;非常正常的有过滤。 .txt、.user.ini、.txxx都被过滤了&#xff0c;应该是白名单或者黑名单加MIME过滤&#xff0c;只允许.jpg、.png。 猜测二…

阿里云服务器部署RabbitMQ流程

阿里云百科分享使用阿里云服务器部署RabbitMQ流程&#xff0c;RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息代理软件&#xff0c;用于在分布式系统中存储转发消息&#xff0c;有良好的易用性、扩展性和高可用性。本文介绍如何通过ECS实例部署Rabbi…

四化智造MES(API)与金蝶云星空对接集成派工作业打通生产订单新增

四化智造MES&#xff08;API&#xff09;与金蝶云星空对接集成派工作业打通生产订单新增 对接系统&#xff1a;四化智造MES&#xff08;API&#xff09; MES建立统一平台上通过物料防错防错、流程防错、生产统计、异常处理、信息采集和全流程追溯等精益生产和精细化管理&#x…