单位建网站的优势,运城做网站哪家公司好,网站首页像素,创新创业大赛项目计划书C笔记之字节数组的处理
code review! 文章目录 C笔记之字节数组的处理1.字节数组打印2.将字节数组转换为十六进制字符串并打印3.将字符串转为字节数组4.将字节数组转为字符串5.字节数组和字符数组的区别6.字节数组用于二进制数据存储7.字节数组用于网络通信数据传输8.使用 un…C笔记之字节数组的处理
code review! 文章目录 C笔记之字节数组的处理1.字节数组打印2.将字节数组转换为十六进制字符串并打印3.将字符串转为字节数组4.将字节数组转为字符串5.字节数组和字符数组的区别6.字节数组用于二进制数据存储7.字节数组用于网络通信数据传输8.使用 unsigned char 来操作字节数据9.字节数组和二进制字节流10.使用memcpy和memset操作字节数组 1.字节数组打印 运行
代码
#include iostream
#include vectorint main() {std::vectorunsigned char byteArray {0x01, 0x02, 0x03};for (unsigned char byte : byteArray) {std::cout Byte: static_castint(byte) std::endl;}return 0;
}2.将字节数组转换为十六进制字符串并打印 运行
代码
#include iomanip
#include iostream
#include sstream
#include vectorstd::string ByteArrayToHexString(const std::vectorunsigned char byteArray) {std::stringstream ss;ss std::hex std::setfill(0);for (unsigned char byte : byteArray) {ss std::setw(2) static_castint(byte);}return ss.str();
}int main() {std::vectorunsigned 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 stringint main() {std::string inputString Hello, Byte Data!;std::vectorunsigned char byteArray(inputString.begin(), inputString.end());std::cout Byte from String: ;for (unsigned char byte : byteArray) {std::cout static_castint(byte) ;}std::cout std::endl;return 0;
}4.将字节数组转为字符串 运行
代码
#include iostream
#include vector
#include stringint main() {std::vectorunsigned 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.字节数组和字符数组的区别
字节数组和字符数组都是一种用于存储一系列数据的数据结构但它们在数据类型和使用上有一些区别 数据类型 字节数组std::vectorunsigned char字节数组是一个存储无符号字符字节的动态数组。每个元素通常代表一个字节其取值范围是0到255。字符数组C-style字符数组例如char[]或char*字符数组是一组按照C字符串规则存储的字符通常以空字符 \0 结尾。 数据内容 字节数组可以存储任意字节数据包括二进制数据和整数值的字节表示。字符数组主要用于存储文本数据其中每个字符表示一个文本字符。 用途 字节数组通常用于处理二进制数据、字节流、网络通信等场景如在通信协议中传递数据。字符数组主要用于处理文本数据如C语言中的字符串操作以及在文本处理、文件读写等场景。 表示结束 字节数组不需要以特定的值结尾可以存储任意长度的字节数据。字符数组通常需要以空字符 \0 结尾作为字符串的结束标志。
总之字节数组适用于处理通用的二进制数据而字符数组主要用于处理文本数据。在C中字节数组可以使用std::vectorunsigned char来表示而字符数组可以使用C风格的字符数组char[]或C中的std::string来表示。
6.字节数组用于二进制数据存储 7.字节数组用于网络通信数据传输 8.使用 unsigned char 来操作字节数据 运行
代码
#include iostreamint main() {unsigned char byteValue 0xAB; // 1010 1011 in binarystd::cout Byte Value: static_castint(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_castint(byteValue) std::endl;return 0;
}9.字节数组和二进制字节流
字节数组和二进制字节流都是用于存储和处理字节数据的概念但它们可能在上下文中有不同的含义。
字节数组
字节数组是一种数据结构它表示一系列连续的字节。在C中通常使用 std::vectorunsigned char 来表示字节数组。字节数组可以存储任意类型的字节数据包括文本字符、整数、二进制数据等。字节数组中的每个元素通常代表一个字节取值范围是0到255。字节数组可以用于处理通用的二进制数据例如在网络通信、文件IO、数据序列化和反序列化等方面。
以下是一个表示字节数组的简单示例
#include iostream
#include vectorint main() {std::vectorunsigned char byteArray {0x41, 0x42, 0x43, 0x44};for (unsigned char byte : byteArray) {std::cout Byte: static_castint(byte) std::endl;}return 0;
}二进制字节流
二进制字节流是由一系列字节组成的数据流其中每个字节可以取0到255范围内的整数值。二进制字节流通常用于在计算机系统之间传输数据或在文件中存储数据。它主要关注数据的字节表示而不将数据解释为文本字符。二进制字节流可以包含任何类型的数据包括图像、音频、视频、文档等。
以下是一个简单的示例演示了一个二进制字节流的概念
#include iostream
#include fstream
#include vectorint main() {std::vectorunsigned char byteStream {0x41, 0x42, 0x43, 0x44};std::ofstream outputFile(binary_stream.bin, std::ios::binary);if (outputFile.is_open()) {outputFile.write(reinterpret_castchar*(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 iostreamint 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_castint(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_castint(byte) ;}std::cout std::endl;return 0;
}