واضح آرشیو وب فارسی:سایت ریسک: sara_she15-07-2007, 10:49 AMسلام دوستان من با Vs C++.net2003 كار مي كنم . و مي خوام يك متغيري رو كه از جنس رشته(string ) است رو به نوع Achar تبديل كنم يا به عبارت ديگه اونو به عنوان آرگومان تابعي به كار ببرم كه اون تابع ارگوانهاش از نوع Achar هستند كسي مي دونه چطور مي شه اين تبديل رو انجام داد؟ someone15-07-2007, 10:59 PMسلام. فکر میکنم یه مقدار سوالتون برای سایر دوستان عجیب باشه. از این بابت میگم چون نوع ACHAR ممکنه برای دوستان آشنا نباشه. پس بهتره اول در مورد ACHAR صحبت کنیم. برنامه نویسان ++C با نوع WCHAR آشنا هستند. البته کسانی که برای Windows برنامه می نویسن بیشتر با این نوع آشنا هستند. میدونیم که char یه نوع 8 بیتی هست که برای نگهداری character ها به کار میره. WCHAR همون char هست منتها با طول 16 بیت که برای ذخیره کردن Unicode ها به کار میره. به شکل زیر تعریف شده : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! خب حالا بر میگردیم به ACHAR . ACHAR در واقع همون WCHAR هست اما در ArxSDK به جای WCHAR از ACHAR استفاده شده. اول این حالت رو بررسی می کنیم که میخواین ACHAR رو به String تبدیل کنین. کد زیر این کار رو انجام میده : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! و این تابع به شکل زیر میتونه استفاده شه : !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! اما در مورد اینکه String رو به AHCAR تبدیل کنین مقداری قضیه پیچیده تر هست. در اینجا قرار هست شما از Managed به unmanaged به اصطلاح مهاجرت کنین. در این صورت باید با Marshaling آشنا باشین. در کلاس Marshal متودی وجود داره به نام StringToHGlobalUni که String رو (که تایپ مدیریت شده هست) رو به فضای مدیریت نشده کپی میکنه. به عبارت دیکه مقدار فضا از حافظه ی مدیریت نشده به اون اختصاص میده. بعد از استفاده از این متود ، باید فضای اشغال شده رو آزاد کرد که با استفاده از متود FreeHGlobal میشه این کار رو انجام داد. خب متود زیر این کار رو انجام میده. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! البته با توجه به استفاده از Unicode و ماکروهای استفاده شده ممکنه ACHAR به صورت char هم تعریف شده باشه در این صورت از کد بالا با کمی تغییر میشه استفاده کرد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! سعی کردم خوب توضیح بدم ، اگه جاییش واضح نبود در موردش صحبت میکنیم. sara_she17-07-2007, 10:11 AMسلام ممنون از كمك هاتون چون گفتيد اين موضوع براي دوستان عجيب به نظر مي رسه . بهتر ديدم ادامه بحث رو اينجا دنبال نكنيم . در مورد تست كردن روش شما در mail براتون جواب رو نوشتم djsohrab 200718-01-2010, 04:26 PMسلام لطفا تبدیل string به آرایه ای از char را هم توضیح دهید فقط در محیط win32 console Application نه CLR Console:41: ali zi zeperto18-01-2010, 04:34 PMچون گفتيد اين موضوع براي دوستان عجيب به نظر مي رسه چرا فکر میکنید که این موضوع برای دوستان عجیب بنظر می رسه؟از جانب دوستان فرمودید که عجیبه یا از جانب خودتون؟ sin2x=2sinxcosx19-01-2010, 01:03 AMسلام لطفا تبدیل string به آرایه ای از char را هم توضیح دهید فقط در محیط win32 console Application نه CLR Console:41: از تابع c_str کلاس string استفاده کنین . یا یدونه یدونه از 0 تا length کپی کنین توی یدونه * char . djsohrab 200719-01-2010, 08:22 AMاز تابع c_str کلاس string استفاده کنین . یا یدونه یدونه از 0 تا length کپی کنین توی یدونه * char . به طور مثال string s="ABCD"; وقتی توی char *a; کپی میکنم بعدا که a را چاپ میکنم (cout<<a;) علا وه بر چاپ ABCD چیزای دیگه هم چاپ میکنه شاید بگید که برای cout هم یک حلقه بزارم که بیشتر از ABCD چاپ نکنه ولی نمیخوام این کار را بکنم چون در آخر این char را میخوام به یک تابع دیگه بفرستم ali zi zeperto19-01-2010, 10:57 AMهر دو راهی که sin2x=2sinxcosx گفتن قابل پیاده کردن اما استفاده از c_str کوتاه تره و احتیاج به کنترل کردن هم نداره.البته c_str اشاره گر ثابت بر می گردونه که باید توجه کرد. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 651]