C++ 如何将字符串转换为无符号字符数组

C++ 如何将字符串转换为无符号字符数组,c++,arrays,string,C++,Arrays,String,如何转换以下字符串: std::string str = "xasxdfxtg"; 以下是无符号字符数组/字节数组 unsigned char char_arr[1024] = "\xas\xdf\xtg"; 你可以这样做: std::string s{"\\xas\\xdf\\xtg"}; unsigned char char_arr[1024] {0}; // initialize with zeros to make sure after copy it's null terminat

如何转换以下字符串:

std::string str = "xasxdfxtg";
以下是无符号字符数组/字节数组

unsigned char char_arr[1024] = "\xas\xdf\xtg";

你可以这样做:

std::string s{"\\xas\\xdf\\xtg"};
unsigned char char_arr[1024] {0}; // initialize with zeros to make sure after copy it's null terminated

for (int i = 0; i < s.size(); ++i)
{
    char_arr[i] = s[i];
}

std::cout << char_arr; // outputs \xas\xdf\xtg
std::string s{“\\xas\\xdf\\xtg”};
无符号字符[1024]{0};//使用零进行初始化,以确保在复制后它以null终止
对于(int i=0;i我会这样做:

#include <string>
#include <cstring>

int main()
{
    std::string str = "\\xas\\xdf\\xtg";

    unsigned char char_arr[1024] {0};

    std::strcpy((char*)char_arr, str.c_str());

    return 0;
}
#包括
#包括
int main()
{
std::string str=“\\xas\\xdf\\xtg”;
无符号字符[1024]{0};
std::strcpy((char*)char_arr,str.c_str());
返回0;
}

您可以试试这个strcpy

#include <string>
#include <cstring>
int main()
{
 string str ="\\xas\\xdf\\xtg" ;
 unsigned char m_Test[20];
 strcpy( (char*) m_Test, str.c_str() );
  return 0;
}
#包括
#包括
int main()
{
string str=“\\xas\\xdf\\xtg”;
无符号字符m_检验[20];
strcpy((char*)m_检验,str.c_str());
返回0;
}

使用正确的算法:
std::copy()
,而不是
strcpy()

#包括
#包括
#包括
int
main()
{
std::string str=“\\xas\\xdf\\xtg”;
无符号字符[1024]{};
复制(str.cbegin(),str.cend(),char_arr);

std::cout提示:您的字符串不包含反斜杠我看让我将它们加倍。所以您希望
无符号字符
数组实际包含反斜杠?那么您也可以用实数C代码编写双反斜杠。是的,只有单反斜杠存储在无符号字符数组(字节数组)中。这就是我的答案。你的
std::string
中的double仅仅意味着“不要将其视为转义序列,而是一个文字反斜杠”。因此,对于双引号(非原始)中的每对反斜杠,你在内存中只会有一个字节包含
“\”
C字符串。它是以字节的形式存储吗?还是以\\x00\\x00的形式存储?我不确定你的意思,你能澄清一下吗?如果我声明unsigned char\u arr[1024]=“\x00\x00”它将以字节的形式存储值,我相信你的方法将值存储为“\\x00\\x00”,所以,我将它声明为
unsigned char\u arr\1024]{0}“\\x00\\x00…”是一个字符串,它有效地将数组中的所有字节初始化为0(不是
'0'
字符,而是实际的0);“\\x00\\x00…”是一个字符串,有效地包含字符
\
x
\
x
0
。这将是内存中的一些非零数字(134、170、48…)此外,我还建议进行一些阅读和研究,以了解计算机如何将数据存储在内存中,因为我相信您需要它来充分了解您遇到的问题和提供的解决方案。这会将其存储为字节吗?它将字符串存储为“\\xas\\xdf\\xtg”而不是“\xas\xdf\xtg”编辑您的帖子以澄清您真正想要的内容。我的代码符合逻辑。在这两种情况下,这里都没有存储带有双反斜杠的字符串。这是C/C++语法,用于指示非原始字符串中的文字反斜杠。而不是单反斜杠引入的转义序列。您只需使用调试器o甚至只是把每个字节打印成一个整数。我已经修改了这个问题。
 \xas\xdf\xtg