บทความนี้ให้รายละเอียดวิธีการแปลง CString เป็น std::string ใน MFC (Microsoft Foundation Classes) สตริงทั้งสองประเภทนี้มักใช้ในการเขียนโปรแกรม MFC ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องเชี่ยวชาญวิธีการแปลงระหว่างทั้งสองประเภท บทความนี้มุ่งเน้นไปที่สามด้านเป็นหลัก: การใช้ตัวสร้างของ CString โดยใช้แมโคร CA2CT และแมโคร CT2CA ของ ATL และ MFC และใช้ std::wstring เป็นตัวกลาง แต่ละวิธีมีตัวอย่างโค้ดเฉพาะเพื่อช่วยให้ผู้อ่านเข้าใจและฝึกฝนได้ นอกจากนี้ บทความนี้ยังเปรียบเทียบประสิทธิภาพของวิธีการต่างๆ และให้คำแนะนำแนวทางปฏิบัติที่ดีที่สุดเพื่อช่วยให้นักพัฒนาเลือกวิธีการแปลงที่เหมาะสมที่สุด และปรับปรุงประสิทธิภาพการพัฒนาและประสิทธิภาพของโปรแกรม สุดท้ายนี้ บทความนี้ยังมาพร้อมกับคำตอบสำหรับคำถามที่พบบ่อยหลายข้อเพื่อรวบรวมความเข้าใจของผู้อ่านเกี่ยวกับการแปลง CString และ std::string
เมื่อจัดการกับสตริงใน MFC (Microsoft Foundation Classes) การแปลงระหว่าง CString และ std::string เป็นข้อกำหนดทั่วไป เมื่อต้องการแปลงระหว่างชนิดสตริงทั้งสองนี้ ส่วนใหญ่มีวิธีต่อไปนี้: การใช้ตัวสร้างของ CString โดยใช้แมโคร CA2CT และแมโคร CT2CA ของ ATL และ MFC และใช้ std::wstring เป็นตัวกลาง ต่อไปนี้จะขยายรายละเอียดเกี่ยวกับวิธีการใช้แมโคร CA2CT และแมโคร CT2CA ของ ATL และ MFC สำหรับการแปลง
คลาสCStringใช้กันอย่างแพร่หลายใน MFC และมีวิธีโดยตรงสำหรับการแปลงเป็นและจาก std::string ในการแปลง std::string เป็น CString คุณสามารถใช้ตัวสร้างของ CString ได้โดยตรง
std::string stdStr = สวัสดีชาวโลก;
CString cStr(stdStr.c_str());
ในทางกลับกัน เมื่อต้องการแปลง CString เป็น std::string คุณสามารถใช้เมธอด GetString ของ CString
CString cStr = _T(สวัสดีชาวโลก);
มาตรฐาน::สตริง stdStr(cStr.GetString());
เมื่อพูดถึงการแปลงการเข้ารหัสอักขระต่างๆ เช่น จาก ANSI เป็น Unicode หรือจาก Unicode เป็น ANSI MFC และ ATL จะมีชุดของมาโครเพื่อจัดการกับการแปลงเหล่านี้ CA2CT และ CT2CA เป็นมาโครสองตัวที่ใช้กันทั่วไป
แมโคร CA2CT ใช้เพื่อแปลงสตริง ANSI เป็นสตริง TCHAR ในขณะที่มาโคร CT2CA ใช้เพื่อแปลงสตริง TCHAR เป็นสตริง ANSI เมื่อใช้มาโครเหล่านี้ คุณจะต้องรวมไฟล์ส่วนหัว ATL atlbase.h หรือรวม Afx.h (เมื่อใช้ MFC)
#รวม
// CString ถึง std::string
CString cStr = _T(สวัสดีชาวโลก);
CT2CA pszConvertedAnsiString(cStr);
มาตรฐาน::สตริง stdStr(pszConvertedAnsiString);
// std::string ถึง CString
std::string stdStr = สวัสดีชาวโลก;
CA2CT pszConvertedTString(stdStr.c_str());
CString cStr(pszConvertedTString);
std::wstring เป็นการรองรับอักขระแบบกว้างใน C++ มาตรฐาน และสามารถใช้เป็นตัวกลางสำหรับการแปลงระหว่าง CString และ std::string วิธีการนี้มีความสำคัญอย่างยิ่งเมื่อแอปพลิเคชันต้องจัดการกับชุดอักขระ Unicode
// CString ถึง std::string
CString cStr = _T(สวัสดีชาวโลก);
มาตรฐาน::wstring wStr(cStr.GetString());
มาตรฐาน::สตริง stdStr(wStr.begin(), wStr.end());
// std::string ถึง CString
std::string stdStr = สวัสดีชาวโลก;
มาตรฐาน::wstring wStr(stdStr.begin(), stdStr.end());
CString cStr(wStr.c_str());
วิธีการนี้ใช้ประโยชน์จากความสะดวกในการแปลงคอนเทนเนอร์ระหว่าง std::wstring และ std::string และมีความยืดหยุ่นมากขึ้นเป็นพิเศษเมื่อต้องจัดการกับการแปลงชุดอักขระ Unicode และ ANSI
เมื่อตัดสินใจว่าจะใช้วิธีแปลงใด นอกเหนือจากความแม่นยำในการแปลงและความเข้ากันได้ของการเข้ารหัสแล้ว คุณควรคำนึงถึงประสิทธิภาพของโปรแกรมด้วย การใช้ตัวสร้างของ CString หรือเมธอด GetString โดยตรงเป็นวิธีที่ตรงและมีประสิทธิภาพที่สุด แต่ในสถานการณ์ที่เกี่ยวข้องกับการแปลงการเข้ารหัส อาจเหมาะสมกว่าเมื่อต้องใช้แมโคร ATL และ MFC หรือใช้ std::wstring เป็นตัวกลาง สำหรับโปรเจ็กต์ขนาดใหญ่หรือแอปพลิเคชันที่คำนึงถึงประสิทธิภาพ แนะนำให้ทำการประเมินประสิทธิภาพที่เหมาะสมเพื่อค้นหาโซลูชันที่ดีที่สุด
การแปลงประเภทสตริงเป็นข้อกำหนดทั่วไปในการเขียนโปรแกรม การทำความเข้าใจและความสามารถในการใช้วิธีการแปลงเหล่านี้อย่างเชี่ยวชาญเป็นทักษะที่สำคัญสำหรับการพัฒนาแอปพลิเคชัน Windows ที่ใช้ MFC จากการแนะนำข้างต้น เราหวังว่าจะช่วยให้นักพัฒนาจัดการการแปลงระหว่าง CString และ std::string ใน MFC ได้อย่างมีประสิทธิภาพมากขึ้น และปรับปรุงประสิทธิภาพการพัฒนาและประสิทธิภาพของโปรแกรม
1. วิธีแปลง CString เป็น std::string
เมื่อต้องการแปลงวัตถุ CString ใน MFC เป็นวัตถุ std::string คุณสามารถใช้เมธอด GetString() ของ CString เพื่อขอรับตัวชี้สายอักขระลักษณะ C และส่งผ่านเป็นพารามิเตอร์ของตัวสร้าง std::string ตัวอย่างเช่น:
CString cstr = สวัสดีชาวโลก!;std::string str(cstr.GetString());2. วิธีแปลง std::string เป็น CString
เมื่อต้องการแปลงวัตถุ std::string เป็นวัตถุ CString ใน MFC คุณสามารถใช้ตัวสร้าง CString เพื่อส่งผ่านวัตถุ std::string ได้โดยตรง ตัวอย่างเช่น:
std::string str = สวัสดีชาวโลก!;CString cstr(str.c_str());ควรสังเกตว่าตัวสร้าง CString ต้องใช้ตัวชี้สตริงแบบ C ที่จะส่งผ่านเข้าไป
3. CString และ std::string แตกต่างกันอย่างไร?
CString และ std::string เป็นสองประเภทที่แตกต่างกันที่แสดงถึงสตริง พวกเขามีความแตกต่างที่สำคัญดังต่อไปนี้:
CString เป็นส่วนหนึ่งของไลบรารี MFC ในขณะที่ std::string เป็นส่วนหนึ่งของไลบรารีมาตรฐาน C++ CString ได้รับการออกแบบมาสำหรับการเข้ารหัส Unicode ในขณะที่ std::string ใช้การเข้ารหัส ASCII เป็นค่าเริ่มต้น CString ให้วิธีการอำนวยความสะดวกมากมายที่เกี่ยวข้องกับการดำเนินการกับสตริง เช่น Mid, Left, Right เป็นต้น ในขณะที่ std::string ให้ฟังก์ชันการประมวลผลสตริงขั้นสูงบางอย่าง เช่น การค้นหา การแทนที่ การแปลงตัวพิมพ์ ฯลฯ CString สามารถโต้ตอบโดยตรงกับคลาสสตริงอื่นของ MFC (เช่น CArray, CList) ในขณะที่ std::string โดยทั่วไปจำเป็นต้องแปลงเป็นสตริงลักษณะ C เพื่อโต้ตอบกับไลบรารีอื่นตามความต้องการของโปรเจ็กต์เฉพาะและสถานการณ์การใช้งาน ให้เลือกประเภทสตริงที่เหมาะสมเพื่อจัดการการทำงานของสตริง หากอยู่ในโครงการ MFC ขอแนะนำให้ใช้ CString ก่อน หากอยู่ในโครงการ C++ ล้วนๆ จะสะดวกกว่าในการใช้ std::string
โดยรวมแล้ว บทความนี้มีวิธีการแปลง CString และ std::string ที่มีประสิทธิภาพสามวิธี และอธิบายรายละเอียดข้อดี ข้อเสีย และสถานการณ์สมมติที่เกี่ยวข้องของแต่ละวิธี โดยหวังว่าจะช่วยให้ผู้อ่านจัดการกับปัญหาการแปลงสตริงได้อย่างมีประสิทธิภาพในการพัฒนา MFC