C++ 包含UTF-16的独立uint8_t数组按分隔符为文本

C++ 包含UTF-16的独立uint8_t数组按分隔符为文本,c++,c,string,utf-16,uint8t,C++,C,String,Utf 16,Uint8t,我正在接收包含UTF-16编码文本的缓冲区,如下所示: uint8_t rx_data[length] = {0x04, 0x24, 0x04, 0x30, 0x04, 0x3C, 0x04, 0x38, 0x04, 0x3B, 0x04, 0x38, 0x04, 0x4F, 0x00, 0x0A, 0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F, 0x00, 0x0A, 0x04, 0x1E, 0x04, 0x42, 0x0

我正在接收包含UTF-16编码文本的缓冲区,如下所示:

uint8_t rx_data[length] = {0x04, 0x24, 0x04, 0x30, 0x04, 0x3C, 0x04, 0x38, 0x04, 0x3B,
            0x04, 0x38, 0x04, 0x4F, 0x00, 0x0A, 0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F,
            0x00, 0x0A, 0x04, 0x1E, 0x04, 0x42, 0x04, 0x47, 0x04, 0x35, 0x04, 0x41,
            0x04, 0x42, 0x04, 0x32, 0x04, 0x3E}
缓冲区包含三个文本字符串,在我的缓冲区中用“\n”或{0x00,0x0A}分隔。 如何通过新行将此文本拆分为字符串,以便得到如下内容:

uint8_t str1[] = {0x04, 0x24, 0x04, 0x30, 0x04, 0x3C, 0x04, 0x38, 0x04, 0x3B,
                0x04, 0x38, 0x04, 0x4F}
uint8_t str2[] = {0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F}
uint8_t str3[] = {0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F,
                0x00, 0x0A, 0x04, 0x1E, 0x04, 0x42, 0x04, 0x47, 0x04, 0x35, 0x04, 0x41,
                0x04, 0x42, 0x04, 0x32, 0x04, 0x3E}
std::wstring s_rx_data = "string1/nstring2/nstring3";
std::wstring delimiter = "\n";

size_t pos = 0;
std::string token;
while ((pos = s_rx_data.find(delimiter)) != std::string::npos) {
    token = s_rx_data.substr(0, pos);
    std::cout << token << std::endl;
    s_rx_data.erase(0, pos + delimiter.length());
}
std::cout << s_rx_data << std::endl;
我正在考虑以某种方式将我的数组从标准库转换为u16string或WSString,以便我可以像这样处理转换后的字符串smth:

uint8_t str1[] = {0x04, 0x24, 0x04, 0x30, 0x04, 0x3C, 0x04, 0x38, 0x04, 0x3B,
                0x04, 0x38, 0x04, 0x4F}
uint8_t str2[] = {0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F}
uint8_t str3[] = {0x04, 0x18, 0x04, 0x3C, 0x04, 0x4F,
                0x00, 0x0A, 0x04, 0x1E, 0x04, 0x42, 0x04, 0x47, 0x04, 0x35, 0x04, 0x41,
                0x04, 0x42, 0x04, 0x32, 0x04, 0x3E}
std::wstring s_rx_data = "string1/nstring2/nstring3";
std::wstring delimiter = "\n";

size_t pos = 0;
std::string token;
while ((pos = s_rx_data.find(delimiter)) != std::string::npos) {
    token = s_rx_data.substr(0, pos);
    std::cout << token << std::endl;
    s_rx_data.erase(0, pos + delimiter.length());
}
std::cout << s_rx_data << std::endl;
std::wstring s_rx_data=“string1/nstring2/nstring3”;
std::wstring分隔符=“\n”;
大小\u t pos=0;
字符串标记;
while((pos=s_rx_data.find(分隔符))!=std::string::npos){
令牌=s_rx_data.substr(0,位置);
std::cout
std::wstring\u convert;
std::u16string u16=从字节(rx\u数据)转换;

还有很多拆分的例子。

换行是一个
0x00,0x0A
序列。我不确定
std::wstring
是否支持UTF-16。如果只是找到分隔符的问题,那么转换到
std::wstring
是不必要的。这是什么STM32?您使用的是什么编译器?@KamilCuk MCU是STM32H753,我在上面运行FreeRTOS,我使用的是带有GCC编译器的Cube IDE,为什么不只是1。在缓冲区中找到序列
0x00'\n'
。然后2。将该序列向后推,直到该序列变成
std::vector
vector以存储行。3.重复。@KamilCuk我将以这种方式尝试,谢谢!