1. 程式人生 > 實用技巧 >Mat、uchar*、uchar[]之間的相互轉換

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