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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM