مشاهده نسخه کامل
: تبديل متغيري از جنس String به Achar
sara_she
15-07-2007, 10:49
سلام دوستان
من با Vs C++.net2003 كار مي كنم . و مي خوام يك متغيري رو كه از جنس رشته(string ) است رو به نوع
Achar تبديل كنم يا به عبارت ديگه اونو به عنوان آرگومان تابعي به كار ببرم كه اون تابع ارگوانهاش از نوع
Achar هستند كسي مي دونه چطور مي شه اين تبديل رو انجام داد؟
سلام.
فکر میکنم یه مقدار سوالتون برای سایر دوستان عجیب باشه.
از این بابت میگم چون نوع 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_she
17-07-2007, 10:11
سلام
ممنون از كمك هاتون
چون گفتيد اين موضوع براي دوستان عجيب به نظر مي رسه . بهتر ديدم ادامه بحث رو اينجا دنبال نكنيم . در مورد تست كردن روش شما در mail براتون جواب رو نوشتم
djsohrab2007
18-01-2010, 16:26
سلام
لطفا تبدیل string به آرایه ای از char را هم توضیح دهید فقط در محیط
win32 console Application نه CLR Console:41:
ali zi zeperto
18-01-2010, 16:34
چون گفتيد اين موضوع براي دوستان عجيب به نظر مي رسه
چرا فکر میکنید که این موضوع برای دوستان عجیب بنظر می رسه؟از جانب دوستان فرمودید که عجیبه یا از جانب خودتون؟
sin2x=2sinxcosx
19-01-2010, 01:03
سلام
لطفا تبدیل string به آرایه ای از char را هم توضیح دهید فقط در محیط
win32 console Application نه CLR Console:41:
از تابع c_str کلاس string استفاده کنین . یا یدونه یدونه از 0 تا length کپی کنین توی یدونه * char .
djsohrab2007
19-01-2010, 08:22
از تابع c_str کلاس string استفاده کنین . یا یدونه یدونه از 0 تا length کپی کنین توی یدونه * char .
به طور مثال
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
وقتی توی
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کپی میکنم بعدا که a را چاپ میکنم (
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید) علا وه بر چاپ ABCD چیزای دیگه هم چاپ میکنه
شاید بگید که برای cout هم یک حلقه بزارم که بیشتر از ABCD چاپ نکنه ولی نمیخوام این کار را بکنم چون در آخر این char را میخوام به یک تابع دیگه بفرستم
ali zi zeperto
19-01-2010, 10:57
هر دو راهی که sin2x=2sinxcosx گفتن قابل پیاده کردن اما استفاده از c_str کوتاه تره و احتیاج به کنترل کردن هم نداره.البته c_str اشاره گر ثابت بر می گردونه که باید توجه کرد.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.