View Full Version : تبدیل CString به [ ] char
zahmatkesh8519
سه شنبه 23 خرداد 1391, 17:12 عصر
سوال اول :
با این کد تبدیل فقط منحصر به کاراکتر اول رشته می شه ، چطور همه کاراکتر ها تبدیل می شن ؟
char *pBuffer = new char[10];
CString strBuf = _T("Test");
pBuffer =(char *) strBuf.GetBuffer(sizeof(pBuffer));
سوال دوم :
در جاهایی هم چون از نوع های w دار مثل CStringW استفاده کردم موقع تبدیل یه خونه در میون فاصله دار می شه . دلیلش مشخصه ولی آیا راهی برای برگشتش و تبدیل به یک خونه هست ؟
مثلا رشته P r o g r a m چطور می شه تبدیل به رشته Program کرد ؟
mehdi.mousavi
سه شنبه 23 خرداد 1391, 18:50 عصر
سوال اول : با این کد تبدیل فقط منحصر به کاراکتر اول رشته می شه ، چطور همه کاراکتر ها تبدیل می شن ؟
char *pBuffer = new char[10];
CString strBuf = _T("Test");
pBuffer =(char *) strBuf.GetBuffer(sizeof(pBuffer));
سلام.
کدی که نوشته همون ایراد سوال دوم رو داره. در واقع pBuffer[0] همون T هستش، pBuffer[1] صفر هستش، pBuffer[2] حرف بعدی در Test یعنی e و الی آخر و چون Index دوم صفر هستش، بنابراین مابقی رشته رو نمی بینید و تصور کرده اید که فقط کاراکتر اول رشته کپی شده. البته کدی که نوشته اید صحیح نیست، چرا که sizeof(pBuffer) همواره 4 هستش. شما باید Len اون رشته رو بگیرید و به GetBuffer بدید...
سوال دوم : در جاهایی هم چون از نوع های w دار مثل CStringW استفاده کردم موقع تبدیل یه خونه در میون فاصله دار می شه . دلیلش مشخصه ولی آیا راهی برای برگشتش و تبدیل به یک خونه هست ؟
مثلا رشته P r o g r a m چطور می شه تبدیل به رشته Program کرد ؟
برای رفع این مشکل، باید با استفاده از تابع WideCharToMultiByte رشته مورد نظر رو از Unicode به ASCII تبدیل کنید. در ساده ترین حالت:
char szMultiByte[255] = {NULL};
wchar_t *p = L"Test";
int nLen = WideCharToMultiByte(CP_ACP, 0, p, -1, NULL, NULL, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, p, -1, szMultiByte, nLen, NULL, NULL);
موفق باشید.
zahmatkesh8519
سه شنبه 23 خرداد 1391, 22:21 عصر
برادر خیلی ممنون . راه حل خوبیه . ولی مشکل اینجا پیش بیاد که این کاراکتر ها فارسی باشن و بخوای به کاراکتر هایی توی خونه های آرایه char تبدیل بشن . یعنی دیگه فارسی نمومونن ( مشخصه ، چون فارسی از یونی کد استفده می کنه) .
حالا این کد زیر هم مشکل بنده رو حل کرده .
CStringW fff = L"c:\\ProgسیبamFiles\\testname\\A.exe\r\n";
dwBytesToWrite = (DWORD) fff.GetLength()*2 ;
اما مشکل اینجا بود که برای استفاده از تابع writefile و ارسالی متنی برای نوشتن در فایل ، فیلد مربوته که از نوع LPCVOID بود مقدار []char را بهش می دادم و... و الان با کد بالا مشکل الحمد الله رفع شد .
بازم تشکر برادر هم بایت این راهنمایی و هم راهنمایی هایی که تو سایت گزاشتی و ازشون استفاده کردم . خدا عوضش رو بهت به بهترین حالتش بده .:قلب:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.