PDA

View Full Version : تبدیل آرایه باینری به رشته و برعکس



ghasemloo
دوشنبه 13 مرداد 1393, 00:06 صبح
سلام
من یه عکسو با استفاده از کد زیر تبدیل به یه آرایه باینری کردم...
سپس تمام آرایه رو داخل یه رشته ریختم....
چطور می تونم دوباره این رشته رو تبدیل به همون آرایه باینری کنم...

string txt = "";
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] array = ms.GetBuffer();
for (int i = 0; i < array.Length; i++)
{
txt += array[i].ToString();
}

abbas.oveissi
دوشنبه 13 مرداد 1393, 00:33 صبح
سلام
من یه عکسو با استفاده از کد زیر تبدیل به یه آرایه باینری کردم...
سپس تمام آرایه رو داخل یه رشته ریختم....
چطور می تونم دوباره این رشته رو تبدیل به همون آرایه باینری کنم...

string txt = "";
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] array = ms.GetBuffer();
for (int i = 0; i < array.Length; i++)
{
txt += array[i].ToString();
}


اینجوری که نمیتونید،حداقل باد هر بایت رو در سه کاراکتر ذخیره کنید تا بعدا در موقع تبدیل رشته به آرایه بایت بدونید که هر سه کاراکتر باید تبدیل به یک بایت شوند.

abbas.oveissi
دوشنبه 13 مرداد 1393, 00:43 صبح
سلام
من یه عکسو با استفاده از کد زیر تبدیل به یه آرایه باینری کردم...
سپس تمام آرایه رو داخل یه رشته ریختم....
چطور می تونم دوباره این رشته رو تبدیل به همون آرایه باینری کنم...

string txt = "";
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] array = ms.GetBuffer();
for (int i = 0; i < array.Length; i++)
{
txt += array[i].ToString();
}



ببینید این کد بدردتون میخوره :
string txt = ""; MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] array = ms.GetBuffer();
for (int i = 0; i < array.Length; i++)
{
string temp = array[i].ToString("000");
txt += temp;
}




byte[] arrByte = new byte[txt.Length / 3];
for (int i = 0; i < txt.Length; i+=3)
{
string temp = txt.Substring(i,3);
arrByte[i / 3] = byte.Parse(temp);
}
راستی اینکار خیلی غیر بهینه ای هست،احتمالا بتونید کار دیگه ای بکنید.

ghasemloo
سه شنبه 14 مرداد 1393, 14:43 عصر
byte[] arrByte = new byte[txt.Length / 3];
for (int i = 0; i < txt.Length; i += 3)
{
string temp = txt.Substring(i, 3);
arrByte[i / 3] = byte.Parse(temp);
}

حالا چطوری این قسمت رو تبدیل به عکس کنم.....
ببین ماجرا اینکه من یه عکس رو تبدیل به آرایه باینری کردم حالا ریخته امش داخل 1picturebox
ونشون ش دادم
سپس آرایه باینری رو ریخته ام داخل رشته
ماجرا از این شروع میشه که من دوباره میخوام اون رشته رو تبدیل به همون آرایه باینری کنم
وداخل picturebox2 نمایش بدم
چطور این کاررو انجام بدم؟

plus
سه شنبه 14 مرداد 1393, 14:55 عصر
ریخته این آرایه باینری درون رشته به نظر درست نمیاد.هدفتون از این کار چی بوده اصلا؟

ghasemloo
سه شنبه 14 مرداد 1393, 15:00 عصر
ببینید یه حالت دیکدر میخوام باشه
بابت یه کاری من واقا معذرت میخوام چون نمی تونم بگم
اگه میشه کمکم کنید

plus
سه شنبه 14 مرداد 1393, 15:08 عصر
ببینید یه حالت دیکدر میخوام باشه
بابت یه کاری من واقا معذرت میخوام چون نمی تونم بگم
اگه میشه کمکم کنید
اگه میخواین عملیات Encryption انجام بدین بجاین اینکه پای string رو وسط بکشین، هر عمل یا الگوریتمی میخواین انجام بدین روی همون byte array انجام بدین و اگه در نهایت احتیاج دارین که یک نمایش رشته ای ازش داشته باشید از Base64 استفاده کنید.این روشی که الان دارین نه چندان ایمن هست، نه Performance خوبی داره.
بهر حال برای تبدیل byte array به Image d یک MemoryStream بسازین و آرایه رو بهش بفرستید، سپس MemoryStream ساخته شده رو به متد Image.FromStream بدین.

ghasemloo
سه شنبه 14 مرداد 1393, 15:14 عصر
string txt = "";
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] array = ms.GetBuffer();
for (int i = 0; i < array.Length; i++)
{
string temp = array[i].ToString("000");
txt += array[i].ToString();
}
byte[] arrByte = new byte[txt.Length / 3];
for (int i = 0; i < txt.Length; i += 3)
{
string temp1 = txt.Substring(i, 3);
arrByte[i / 3] = byte.Parse(temp1);
}
MemoryStream ms1 = new MemoryStream(arrByte);
pictureBox2.Image = Image.FromStream(ms1);


این کل کدها از temp 1 ارور می گیره

plus
سه شنبه 14 مرداد 1393, 15:19 عصر
خط 7 باید مقدار temp رو به txt اضافه کنید نه مقدار array[i].ToString رو.
یک مقدار دقت، استفاده از Break Point و امثال اینها هم بد نیست تا اینکه به هر Error ی میخورید بدون توجه به متن خطا و ... اینجا پست بگذارین.

ghasemloo
سه شنبه 14 مرداد 1393, 15:24 عصر
ایول حاجی دمت گرم
در مورد خط آخرتم اینکه خطاش خطای runtime

Runtime error( خطاهاي زمان اجرا)
اين دسته از خطاها كه بدترين نوع خطا ها مي باشند از لحاظ debug (اشكال زدايي) سخت ترين نوع خطا ها بحساب مي آيند، عموما به علت رفتارهاي متغيير رفع آن مشكل مي باشد؛ بعنوان مثال (تقسيم بر صفر) نمونه از اين خطا هاست.

plus
سه شنبه 14 مرداد 1393, 15:28 عصر
debugging رو برای همین گذاشتن.در ضمن بله این نوع خطاها ممکنه در یک نرم افزار چندده هزار خطی رفع کردشون سخت باشه نه در برنامه 20 خطی!

ghasemloo
سه شنبه 14 مرداد 1393, 15:35 عصر
بازهم نیاز به تجربه داره
اینی که شما میگی کاملا تجربیه
بعد هم دیباگی شما میگی از این خط error نمی گرفت بلکه از خط 14
در آخر یه نصحیت دوستانه:
سعی کن از این به بعد اگه کسی رو کمک کردی بی منت باشه
یا اگه نتونستی منت نذاری کسی رو کمک نکن
امثال شما برنامه نویس با تجربه الحمدلله تو این سایت زیاده ....

plus
سه شنبه 14 مرداد 1393, 15:52 عصر
من منتی نمیگذارم، والا من برای خودت میگم دوست عزیز برای من که مساله ای نیست یا حوصله دارم به این سوال های اینطوری جواب میدم یا نمیدم شاید کس دیگه جواب بده.
و البته برام عجیبه که شما وقتی به خطایی میخوری زحمت اینکه حتی متن خطا رو بخونی و کمی تلاش کنی خودت حلش کنی به خودت نمیدی در عوض وقت میگذاری میای پست میگذاری و منتظر میشی یکی جواب بده!
برای خودت بهتر هست که Debugging رو یاد بگیری نه اینکه با استناد به یک جمله در یک -مثلا- کتاب، انتظار داشته باشی در فروم پاسخ خطاهای اینچنینی رو دریافت کنی.
من هدفت رو از برنامه نویسی نمیدونم ولی اگه قصدی جز تفریح داشته باشی و دنبال پول توش هستی اینطوری به جایی نمیرسی. خود دانی.
و البته شما یک فروم مطرح انگلیسی زبان رو پیدا نمیکنی که توش کسی بیاد برای شما کد Debug کنه.

abbas.oveissi
چهارشنبه 15 مرداد 1393, 11:58 صبح
بازهم نیاز به تجربه داره
اینی که شما میگی کاملا تجربیه
بعد هم دیباگی شما میگی از این خط error نمی گرفت بلکه از خط 14
در آخر یه نصحیت دوستانه:
سعی کن از این به بعد اگه کسی رو کمک کردی بی منت باشه
یا اگه نتونستی منت نذاری کسی رو کمک نکن
امثال شما برنامه نویس با تجربه الحمدلله تو این سایت زیاده ....
خب دلیل خطای خط 14 همون خطی هست که آقای Plus بهش اشاره کردند. اگر کد منو عوض نمیکردید به خطا نمیخوردید،حالا چرا عوضش کردید نمیدونم. For اول باید این شکلی باشه :

string temp = array[i].ToString("000");
txt += temp;

برای رمزنگاری هم حتما از الگوریتم هایی استفاده کنید که byte array به عنوان ورودی میگیرند.
این روش هم خیلی طول میکشه و هم خیلی نکات داره که کد رو غیر بهینه میکنه.