unsigned char表示byte/字节及存取数据
转载自:https://blog.csdn.net/zhaojunwuiris/article/details/84398455
unsigned char
unsigned char常用来表示byte,原因如下:
char与unsigned char都占用一个字节(8bit)的内存,unsigned char无符号位,byte也无符号位这一说法。但是将byte的值取出赋值给int,long等其它类型时,系统会最高位进行扩展。如果使用符号类型(char),则以符号位(最高位)扩展,会造成数据错误;如果使用无符号类型(unsigned char),则以零扩展,并不会造成数据错误。因此常用unsigned char常用来表示byte。
参考博客:http://www.cnblogs.com/E-star/archive/2013/04/16/3024258.html
数据存储
整体存储可采用赋值方式直接修改:
unsigned char data;
data = 0x0f; // 存入00001111
关于指定位的数据存入,本文提供方法为:
如数据为data-00010100,存入数据为temp-00000101。现在需要取出temp的后四位存入data高四位中。
首先取出数据data中其他位的值(00010100取出后四位,即00000100),取出存入数据temp的后四位并左移四位(00000101取后四位左移四位为01010000),然后两者做位或即可。
unsigned data(0x14), tmep(0x05); // data-00010100, tmep-00000101
data = (data & 0x0f) | ((tmep & 0x0f) << 4); // 取temp后四位存入data高四位中
数据获取
取出指定位数:
unsigned char data(0x14); // data-00010100
int iData = data & 0x0f; // 取后四位
两个unsigned char字符串拼接
要将两个 unsigned char
字符串拼接为一个新的 unsigned char
字符串,并且考虑到 \0
可能带来的影响,可以使用以下步骤:
- 确定长度:计算两个
unsigned char
字符串的长度。 - 分配内存:为新的
unsigned char
字符串分配足够的内存。 - 复制内容:将两个字符串的内容复制到新分配的内存中。
下面是一个示例代码,展示了如何完成这些步骤:
#include <iostream>
#include <cstring> // For std::memcpy
int main() {
// 定义两个 unsigned char 字符串
unsigned char str1[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; // "Hello"
unsigned char str2[] = { 'W', 'o', 'r', 'l', 'd', '\0' }; // "World"
// 计算每个字符串的长度,包括 \0
size_t len1 = sizeof(str1) / sizeof(str1[0]);
size_t len2 = sizeof(str2) / sizeof(str2[0]);
// 为新字符串分配内存
unsigned char* combined = new unsigned char[len1 + len2 - 1]; // -1 to avoid double \0
// 复制第一个字符串到新字符串
std::memcpy(combined, str1, len1 - 1); // Exclude the terminating \0
// 复制第二个字符串到新字符串
std::memcpy(combined + len1 - 1, str2, len2); // Include the terminating \0
// 输出结果
std::cout << "Combined String: ";
for (size_t i = 0; i < len1 + len2 - 1; ++i) {
std::cout << combined[i];
}
std::cout << std::endl;
// 清理
delete[] combined;
return 0;
}
代码解释:
- 定义字符串:
str1
和str2
包含\0
作为字符串结束符。
- 计算长度:
len1
和len2
包括终止符\0
的长度。
- 分配内存:
- 新的
unsigned char
字符串的长度是两个字符串的长度总和减去一个\0
,因为两个字符串之间只有一个\0
需要。
- 新的
- 复制内容:
- 使用
std::memcpy
复制str1
和str2
的内容到新分配的内存中。为了避免将两个\0
放入新字符串中,我们在复制第一个字符串时排除了终止符\0
,在复制第二个字符串时保留了终止符\0
。
- 使用
- 输出结果:
- 输出拼接后的
unsigned char
字符串,显示合并后的内容。
- 输出拼接后的
- 清理:
- 释放分配的内存。
这种方法处理了 \0
带来的问题,确保新字符串的格式正确且有效。