c++字符串转字节数组
时间: 2024-12-23 13:11:48 浏览: 19
在C++中,将字符串转换为字节数组通常涉及到将字符数组(std::string)的内容复制到标准库中的`std::vector<unsigned char>`或`char*`中。这里是一个简单的例子:
```cpp
#include <string>
#include <vector>
std::string str = "Hello, World!";
std::vector<unsigned char> byte_array;
// 使用迭代器遍历并复制每个字符的ASCII值
for (const char& ch : str) {
byte_array.push_back(static_cast<unsigned char>(ch));
}
// 或者使用c-style string并获取其长度
size_t len = str.length();
byte_array.resize(len);
std::copy(str.begin(), str.end(), byte_array.data());
```
在这个例子中,我们首先创建了一个空的`std::vector<unsigned char>`,然后通过循环将`str`中的每一个字符转换为其对应的ASCII值,并添加到字节数组中。注意,如果字符串中有非ASCII字符,这种方法可能不会得到预期结果,因为它通常只处理基本的ASCII编码。
相关问题
linux下c/c++,使用unicode编码转换字节数组和字符串
在Linux下使用Unicode编码转换字节数组和字符串,可以使用以下方法:
1. 将字符串转换为Unicode编码的字节数组
```c++
#include <locale>
#include <codecvt>
#include <string>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wide_string = converter.from_bytes("Hello, 世界!");
const char* bytes = reinterpret_cast<const char*>(wide_string.c_str());
```
2. 将Unicode编码的字节数组转换为字符串
```c++
#include <locale>
#include <codecvt>
#include <string>
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
std::wstring wide_string(reinterpret_cast<const wchar_t*>(bytes));
std::string str = converter.to_bytes(wide_string);
```
在上述代码中,使用了C++11中的std::wstring_convert和std::codecvt_utf8<wchar_t>来进行Unicode编码转换。std::wstring_convert提供了from_bytes和to_bytes两个方法,分别用于将字符串转换为Unicode编码的字节数组和将Unicode编码的字节数组转换为字符串。std::codecvt_utf8<wchar_t>则是一个Unicode编码转换器,它可以将Unicode编码的字符转换为UTF-8编码的字符,或将UTF-8编码的字符转换为Unicode编码的字符。
linux下c/c++,使用iconv进行unicode编码转换字节数组和字符串
在Linux下,可以使用iconv库进行Unicode编码转换。下面是一个示例代码,将Unicode字符串转换成字节数组、将字节数组转换成Unicode字符串:
```c++
#include <iconv.h>
#include <string.h>
#include <stdio.h>
int main()
{
// 将Unicode字符串转换成字节数组
const char *unicode_str = u8"\u4F60\u597D";
size_t unicode_len = strlen(unicode_str);
size_t buf_len = unicode_len * 4; // 一个Unicode字符最多占4个字节
char *buf = new char[buf_len];
memset(buf, 0, buf_len);
iconv_t cd = iconv_open("UTF-8", "UCS-2LE");
char *in_buf = (char*)unicode_str;
char *out_buf = buf;
size_t in_len = unicode_len;
size_t out_len = buf_len;
int ret = iconv(cd, &in_buf, &in_len, &out_buf, &out_len);
if (ret == -1) {
perror("iconv");
return -1;
}
printf("字节数组: ");
for (size_t i = 0; i < buf_len - out_len; ++i) {
printf("%02X ", (unsigned char)buf[i]);
}
printf("\n");
// 将字节数组转换成Unicode字符串
char *byte_str = buf;
size_t byte_len = buf_len - out_len;
size_t unicode_buf_len = byte_len / 2 + 1; // 一个Unicode字符占2个字节
char *unicode_buf = new char[unicode_buf_len];
memset(unicode_buf, 0, unicode_buf_len);
cd = iconv_open("UCS-2LE", "UTF-8");
in_buf = byte_str;
out_buf = unicode_buf;
in_len = byte_len;
out_len = unicode_buf_len;
ret = iconv(cd, &in_buf, &in_len, &out_buf, &out_len);
if (ret == -1) {
perror("iconv");
return -1;
}
printf("Unicode字符串: %s\n", unicode_buf);
delete[] buf;
delete[] unicode_buf;
return 0;
}
```
需要注意的是,iconv库只能处理单个Unicode字符,如果要处理Unicode字符串,则需要将其拆分成单个Unicode字符进行转换。上面的示例代码中,使用了UCS-2LE编码,可以根据需要修改为其他编码。
阅读全文