View Full Version : سوال: تابع تبدیل String به AnsiChar
loo30fer
جمعه 20 خرداد 1390, 02:42 صبح
با سلام خدمت تمامی دوستان
من میخوام متغیر String رو به AnsiChar تبدیل کنم حالا با چه تابعی میتونم اینکار رو بکنم ممنون میشم کمک کنید با تشکر.
Var
Motaghayer1: String;
Motaghayer2: AnsiChar;
begin
Motaghayer1:= 'A';
Motaghayer2:= ???????;
end;
یوسف زالی
جمعه 20 خرداد 1390, 03:49 صبح
سلام.
string به ansistring تبدیل میشه اما شما داری میریزی تو ansichar.
یا برای string اندیس می خواد یا اینکه ansistring باید باشه.
برای تبدیل هم به ansistring کافیه TypeCast کنید:
AnsiString(ST) // your string
loo30fer
جمعه 20 خرداد 1390, 08:42 صبح
ممنون از جوابتون ولی خوب دوست عزیز من برای اینکه کد اسکی کارکتر مربوطه رو بگیرم مجبورم مقداری رو که تو یک متغیر رشته ای بر میگرده رو تو یک متغیر دیگه به AnsiChar تبدیل کنم و ایندفعه به ORD بدم حالا راه حل چیست ؟؟؟
Felony
جمعه 20 خرداد 1390, 09:11 صبح
ممنون از جوابتون ولی خوب دوست عزیز من برای اینکه کد اسکی کارکتر مربوطه رو بگیرم مجبورم مقداری رو که تو یک متغیر رشته ای بر میگرده رو تو یک متغیر دیگه به AnsiChar تبدیل کنم و ایندفعه به ORD بدم حالا راه حل چیست ؟؟؟
چرا به AnsiChar ؟! به صورت زیر میتونید کد اسکی کاراکتر مورد نظر رو بگیرید :
var
Str: String;
ASCCode: Cardinal;
begin
Str:= 'A';
ASCCode:= Ord(Str[1]);
end;
Mahmood_M
جمعه 20 خرداد 1390, 15:05 عصر
AnsiChar نوع داده ای هست که فقط یک کارکتر رو در خودش ذخیره میکنه ، در حالی که String مجموعه ای از چند کارکتر هست ، پس امکان تبدیل String به AnsiChar وجود نداره
AnsiString نوع داده ای هست که مجموعه ای از چند کارکتر از نوع AnsiChar رو در خودش ذخیره میکنه
اگر از نسخه های پایینتر از 2009 دلفی ( که Unicode نیستند ) استفاده میکنید ، یک داده از نوع String رفتارش مثل یک داده نوع AnsiString هست و هر کارکتر از اون میشه یک AnsiChar ، در واقع مقدار زیر برابر با یک کارکتر از نوع AnsiChar هست :
Str[n]
( کارکتر n ام از رشته ی Str )
اما اگر از دلفی 2009 ( یا بالاتر ) استفاده میکنید ، یک داده String مجموعه ای از کارکترهای از نوع WideChar هست ، یعنی مقدار زیر برابر با یک کارکتر از نوع WideChar هست :
Str[n]
مثال زیر به درک بهتر کمک میکنه :
کد زیر در دلفی 7 بدون مشکل کامپایل میشه ، اما در دلفی 2009 ( یا بالاتر ) با Error کامپایل مواجه می شید :
var
S1 : String;
M : AnsiChar;
begin
S1 := 'Mahmood';
M := S1[1];
end;
کد زیر برعکس هست ، در دلفی 7 با خطا مواجه میشید ولی در دلفی 2009 ( یا بالاتر ) بدون مشکل کامپایل میشه :
var
S1 : String;
M : WideChar;
begin
S1 := 'Mahmood';
M := S1[1];
end;
با توجه به توضیحات بالا ، در نسخه های پایینتر از 2009 ، برای داشتن یک کارکتر AnsiChar کافیه که به صورت [S1[1 کارکتر رو دریافت کنید ولی در نسخه های 2009 یا بالاتر باید از TypeCast استفاده کنید :
AnsiChar(S1[1])
یا اینکه String رو ابتدا TypeCast کنید به AnsiString و بعد کارکتر رو دریافت کنید :
AnsiString(S1)[1]
اما در مورد سئوالتون در رابطه با گرفتن کد اسکی :
تابع Ord ورودیش نوع Char ( یا ... ! )هست ، گرچه در نسخه ی 2009 به بالا نوع Char برابر با WideChar و در نسخه های پایینتر از اون نوع Char برابر با AnsiChar هست ، اما تابع Ord هر دو نوع WideChar و AnsiChar رو به عنوان ورودی می پذیره ، پس مهم نیست که نوع داده ورودیش AnsiChar باشه یا WideChar ، فقط کافیه " یک " کارکتر باشه و اون هم اگر با String به صورت یک آرایه از کارکترها رفتار بشه بدست میاد ، مثل همون مثالی که در پست قبل ارایه شد ...
موفق باشید ...
tdkhakpur
جمعه 20 خرداد 1390, 21:29 عصر
گرچه در نسخه ی 2009 به بالا نوع Char برابر با WideChar و در نسخه های پایینتر از اون نوع Char برابر با AnsiChar هست ،
اگه تعریف مجدد به این کلمه کلیدی char برای تعریف متغییر نشده باشه همان یک بایت طول داره و مانند نسخه های گذشته هست و حالت استاندارد دلفی هم برای char همیشه 1 بایت هست.
Mahmood_M
شنبه 21 خرداد 1390, 11:18 صبح
نوع Char یک Alias هست ، حالا می تونه Alias ای برای AnsiChar یا WideChar باشه ، در نسخه های پایینتر از 2009 ، Alias ای از AnsiChar بود و در نسخه های 2009 و بالاتر Alias ای از WideChar هست ، یعنی در نسخه های قبل از 2009 کامپایلر هر جا که به Char میرسه ، AnsiChar رو جایگزین میکنه و در نسخه های 2009 و بالاتر ، کامپایلر وقتی به Char میرسه ، نوع WideChar رو جایگزین میکنه
با توجه به موارد بالا ، Char در نسخه های 2009 و بالاتر میشه WideChar و 2 بایت هست و در نسخه های پایینتر از 2009 میشه AnsiChar و 1 بایت هست
tdkhakpur
یک شنبه 22 خرداد 1390, 23:39 عصر
با توجه به موارد بالا ، Char در نسخه های 2009 و بالاتر میشه WideChar و 2 بایت هست و در نسخه های پایینتر از 2009 میشه AnsiChar و 1 بایت هست
نمیدانم من که با سی 2009 کار میکنم طول این نوع تعریف میشه یک و دو نیست.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.