PDA

View Full Version : سوال: تبدیل کد اسکی به کاراکتر



Masoome_das
یک شنبه 16 آبان 1389, 23:12 عصر
سلام
من می خواهم یک تابع بنویسم که تعدادی کاراکتر به صورت تصادفی تولید کند
راه حلی که خودم در نظر گرفتم این که کد اسکی کاراکتر ها را به صورت تصادفی بسازم بعد کد اسکی را به کاراکتر تبدیل کنم
مثلا کد اسکی کاراکتر a عدد 65 حالا چطوری 65 را به a تبدیل کنم.

Mohandes2009
یک شنبه 16 آبان 1389, 23:22 عصر
Text = Convert.ToChar(67).ToString()

hamid67fathi
یک شنبه 16 آبان 1389, 23:24 عصر
char c = Convert.ToChar(32)

Salar Ashgi
یک شنبه 16 آبان 1389, 23:54 عصر
روشها که خیلی زیاده ، از Type Casting هم میتوانید استفاده کنید :



Random rnd = new Random();
int code = rnd.Next(65, 90);
char ch = ((char)(code));
MessageBox.Show(ch.ToString());

mehdi.mousavi
دوشنبه 17 آبان 1389, 00:09 صبح
سلام من می خواهم یک تابع بنویسم که تعدادی کاراکتر به صورت تصادفی تولید کند راه حلی که خودم در نظر گرفتم این که کد اسکی کاراکتر ها را به صورت تصادفی بسازم بعد کد اسکی را به کاراکتر تبدیل کنم مثلا کد اسکی کاراکتر a عدد 65 حالا چطوری 65 را به a تبدیل کنم.

سلام.
تبدیل کاراکتر با کد اسکی 65 به char معادلش، بسادگی cast کردن عدد 65 به char میسر هستش:

char ch = (char)65;

اما در اصل مساله نکته ای نهفته هستش، اونهم اینکه چطوری این اعداد تصادفی رو تولید کنیم. اینجا seed ای که برای تولید اعداد تصادفی استفاده میشه اهمیت داره و بر اساس SDL باید حتما از پیاده سازی کلاس RandomNumberGenerator استفاده بشه. RNGCryptoServiceProvider کلاسی هستش که از RandomNumberGenerator مشتق شده و کار دشوار ایجاد اون اعداد رو برای ما انجام میده. بدین ترتیب:


byte[] seed = new byte[4];
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
rng.GetBytes(seed);


من اینجا یه آرایه ای به اسم seed رو با اعداد تصادفی "درست تولید شده" پر می کنم. اما حالا باید به روشی، فقط کاراکترهای محدود به Range خاصی رو انتخاب کنم. بنابراین، با استفاده از seed تولید شده و کلاس Random، اقدام به تولید اعداد تصادفی در بازه 65-91 میکنم، که میشه حرف A تا Z:


Random rnd = new Random(BitConverter.ToInt32(seed, 0));
for (int i = 0; i < 5; i++)
{
char ch = (char)rnd.Next(65, 91);
}


موفق باشید.

پاورقی: کلاس Random بصورت پیش فرض از time-dependent seed value استفاده میکنه که این بر اساس SDL رد شده هستش.

m.dashte
یک شنبه 17 تیر 1397, 18:54 عصر
ببخشد راهی وجود دارد که برای حروف فارسی هم جواب دهد؟
من این روش رو برای حروف فارسی استفاده کردم ولی جواب نداد و یکسری کارکتر بی ربط نشون می ده