因项目需要,涉及到unsigned char*和string和unsigned char[]的相互转换,记录一下各种方法:
**string转为unsigned char **[]
string str = "ABCDE";
unsigned char ch[16] = {0};
/*注意:当字符串中部存在\0时,以下方法拷贝到字符数组中均会被截断*/
strcpy((char *)ch, str.c_str());
strncpy((char *)ch, str.c_str(), str.length());
memcpy(ch, str.c_str(), str.length());
snprintf((char *)ch, str.c_str(), str.length());
string 转为 unsinged char*
string str = "ABCDEF";
unsigned char* ch_ptr = NULL;
ch_ptr = (unsigned char *)str.c_str();
cout << ch_ptr << endl;
*unsigned char 转为 string
/*注意:当字符数组中存在\0时,字符串会被截断,例如
unsigned char ch[16] = {'A','B','C','\0','D','E','F'};*/
unsigned char ch[16] = "ABCDEF";
string str = "";
//法一:循环拷贝
cout << sizeof(ch) << endl; //16
cout << strlen((char *)ch) << endl; //6
for (int i = 0; i < strlen((char*)ch); i++) {
str += ch[i];
}
cout << str << endl;
//法二:unsigned char *转为char *再转string
str = (char*)ch;
cout << str << endl;
//法三:unsigned char *转为unsigned char[]再转为string
unsigned char* foo;
unsigned char ch[] = "Hello world";
string str;
foo = ch;
str.append(reinterpret_cast<const char*>(foo));
cout << str << endl;