Mat、uchar*、uchar[]之間的相互轉換
Mat preImg = imread("9.jpg")
Mat dst = Mat(preImg.size, CV_8UC3, Scalar(255, 255, 255));
//uchar*給Mat轉換資料的時候,需要先定義圖片的大小
uchar* s = preImg.data; //Mat轉uchar*
dst.data = s; //uchar*轉Mat
char* t = (char*) s; //uchar* 轉char*
char a[9]; //定義char[]陣列
char* m = a; //char陣列轉char*
string str = m; //char* 轉string
char* m = const_cast<char*>(str.c_str());//string轉char*
char m[] = "string"; string str = m; //char陣列轉string
string str="213"; char m[]="hjkjdfas"; strncpy(m,str.c_str(), str.length()+1);//string轉char陣列
char []與char *之間轉換 char []轉char *:直接進行賦值即可 // char[] 轉char * char str[] = "lala"; char *str1 = str; cout << str1 << endl; char *轉char[]:字元拷貝實現,不能進行賦值操作// char *轉換為char [] const char *st = "hehe"; char st1[] = "lalalala"; strncpy(st1, st, strlen(st) + 1); // 注意加1操作 // tp = temp; //錯誤,不能實現 cout << st1 << endl; char 與const char 之間轉換 const char 轉char :拷貝實現,不能進行賦值 // const char *轉char * const char *st = "lala"; // 直接賦值不可以 //char *st1 = st; // (不可以編譯器報錯)//cout << st1 << endl; // 另外開闢空間,將字元一個一個複製過去 char *ncstr = new char[strlen(st) + 1]; strcpy(ncstr, st); cout << ncstr << endl; char 轉const char :直接進行賦值 // char *轉const char * char *st = "hehe"; // (編譯提示警告) const char *st1 = st; cout << st1 << endl; char *與string之間轉換 char *轉string:1)直接賦值;2)構造轉換實現 // char*轉換為string // (注意,定義char *變數,並直接賦值,最好定義為const變數,否則編譯器警告) const char *st = "hello"; // 賦值轉換 string st1 = st; cout << st1 << endl; // 構造轉換 string s1(st, st + strlen(st)); cout << s1 << endl; // 改變const char *變數值 st = "lalala"; cout << st << endl; string轉char *:賦值操作(注意型別轉換) // string轉char * string st = "My test"; //char *st1 = st; // 錯誤型別不同 //char *st1 = st.c_str(); // 錯誤型別不同 char *st1 = const_cast<char *>(st.c_str()) ; cout << st1 << endl; char[]與string之間轉換 char []轉string:1)直接賦值;2)構造轉換實現 // char[]轉換為string char st[] = "hello"; // 直接賦值實現 string st1 = st; cout << st1 << endl; // 構造實現 string st2(st, st + strlen(st)); cout << st2 << endl; string轉char[]:拷貝實現,不能直接賦值 // string轉char [] string ts = "My test1"; //char ts1[] = ts; // 錯誤 //char ts1[] = const_cast<char *>(ts.c_str()); // 錯誤 char ts1[] = "lalallalalaaaa"; strncpy(ts1, ts.c_str(), ts.length() + 1); // 注意,一定要加1,否則沒有賦值'\0' cout << ts1 << endl; return 0; 總結 涉及到char []字元陣列與其它型別轉換,一般需要進行拷貝,不能直接賦值實現。char []和char *都可以通過構造新的string完成其對string的轉換。涉及到到char *轉換,需要注意型別一致,同時注意const的使用。
參考:https://blog.csdn.net/weixin_43081805/article/details/84347514?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase
https://blog.csdn.net/yzhang6_10/article/details/51164300