C++ string 转换为 unsigned char*
时间: 2023-12-25 12:53:14 浏览: 91
可以使用 `reinterpret_cast` 将 `std::string` 转换为 `unsigned char*`,示例代码如下:
```c++
std::string str = "Hello, world!";
unsigned char* data = reinterpret_cast<unsigned char*>(str.data());
```
其中,`str.data()` 返回指向 `std::string` 存储数据的指针。使用 `reinterpret_cast` 将其转换为 `unsigned char*` 类型即可。请注意,`unsigned char*` 指针指向的是字符串的首地址,因此可能需要根据实际情况计算字符串的长度。
相关问题
怎么把string 赋值给unsigned char*
将一个 `std::string` 赋值给 `unsigned char*` 可以通过以下两种方法实现:
方法一:使用 `strcpy` 函数
```c++
#include <iostream>
#include <cstring>
int main() {
std::string str = "Hello, world!";
const char* cstr = str.c_str(); // 获取 std::string 对应的 const char* 指针
unsigned char* data = new unsigned char[str.size() + 1]; // 动态分配内存,注意要加一位存储字符串结束符 '\0'
strcpy((char*)data, cstr); // 将 const char* 拷贝到 unsigned char* 中
// 其它操作
delete[] data; // 释放内存
return 0;
}
```
在这个例子中,我们首先定义了一个 `std::string` 对象 `str`,然后通过 `c_str()` 函数获取其对应的 `const char*` 指针 `cstr`。接着,我们动态分配了一个 `unsigned char*` 数组 `data`,并使用 `strcpy` 函数将 `cstr` 拷贝到 `data` 中。最后,我们进行了一些其它的操作,并在最后释放了内存。
方法二:使用 `std::copy` 算法
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
int main() {
std::string str = "Hello, world!";
const char* cstr = str.c_str(); // 获取 std::string 对应的 const char* 指针
unsigned char* data = new unsigned char[str.size() + 1]; // 动态分配内存,注意要加一位存储字符串结束符 '\0'
std::copy(cstr, cstr + str.size() + 1, data); // 使用 std::copy 算法将 const char* 拷贝到 unsigned char* 中
// 其它操作
delete[] data; // 释放内存
return 0;
}
```
在这个例子中,我们使用了 `std::copy` 算法将 `const char*` 指针 `cstr` 中的字符拷贝到了 `unsigned char*` 数组 `data` 中。注意,这里需要将 `cstr` 的结束符也一并拷贝到 `data` 中,因此在 `std::copy` 函数的第三个参数中需要加一。然后,我们进行了一些其它的操作,并在最后释放了内存。
const unsigned char*转string
可以使用`std::string`的构造函数来将`const unsigned char*`转换为`std::string`。
例如,假设`const unsigned char*`的变量名为`data`,可以使用以下代码进行转换:
```c++
std::string str(reinterpret_cast<const char*>(data));
```
这里使用了`reinterpret_cast`来将`const unsigned char*`转换为`const char*`,然后将其传递给`std::string`的构造函数来创建一个新的`std::string`对象。