الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تحويل نص أو رقم إلى أرقام ثنائية

مغلق
بدأه م. حسام فيصل في 9 ديسمبر 2005 · 7 رد · 2,800 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

أحتاج إلى االمساعدة في مشروع محاكاة TCP/ip ..... حيث أن المشروع باختصار هو تشكيل TCP/ip Header باستخدام C#.net ثم ارساله عبر الشبكة و الاستقبال على جهاز مقابل و القيام بعملية عكسية ( أي التحويل مجدداً إلى نص مكتوب ) ..........

المشكلة هي في عملية تحويل النص المكتوب داخل مربع نص إلى ترميز ثنائي مباشرة ( دون الإضطرار إلى تحويله إلى ASCII ) بحيث يُمثل كل حرف ثمانية بتات ....

حاولت تجربة BinaryWriter و لكنه لم يؤدي الغرض المطلوب ......

مع العلم أنه في لغة الجافا يمكن القيام بذلك مباشرة (باستدعاء الدالة ToBinary ) ......

و لكم جزيل الشكر

#2

بسم الله الرحمن الرحيم

تحويل من نص إلى مصفوفة بايتات

               // تحويل من نص إلى مصفوفة بايتات
                byte[] data = System.Convert.FromBase64String(txt.Text);

تحويل من مصفوفة بايتات إلى نص

               // تحويل من مصفوفة بايتات إلى نص  
                string data = System.Convert.ToBase64String(ByteArrayData);

تحويل من مصفوفة بايتات إلى مصفوفه من البتات

              // وإذا كنت تريد تحويل إلى بتات تابع
              // تحويل من مصفوفة بايتات إلى مصفوفه من البتات ونستطيع أن نقوم بجميع العمليات على البت الواحد
             System.Collections.BitArray BinaryData = new System.Collections.BitArray(ByteArrayData)

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#3

تم التحويل إلى بتات و لكن كيف استطيع كتابتها إلى Stream بالتالي إرسالها عبر الشبكة ؟ لأن الوسيط الأول هو مصفوفة من البايتات و ليس البتات ؟؟

القصد من سؤالي هو : تحويل الحرف A مثلاً إلى 01000000 وهكذا ...............

و الرقم 5 إلى 00000101 ............................

و مشكور على الجهد

تم تعديل هذه المشاركة بواسطة informat في 9 ديسمبر 2005 في 20:28

#4

بسم الله الرحمن الرحيم

    byte[] data = new byte[BinaryData.Lenght];
    BinaryData.CopyTo(data, 0);

أخي الكريم لو قرأنا الأن محتويات المصفوفة لرأينا أنها كما ذكرت

مثلأ: 8 عند تحويله إلىمصفوفة بتات يتحول محموع المصفوفه إلى 8 وعند معاودة نسخها إلى مصفوفة بايتات من جديد يجب حجز 8 بايتات وليس بايت واحد وهذا ما نعرفه من خلال

الخاصية Lenght أو Count وبعد عملية النسخ لو حاولنا طباعة محتويات مصفوفة البايتات لرأناها على النحو التالي : 00000101

     for( int i = 0; i <= data.Lenght; i++)
     {
         Console.Write(data.ToString());
     }
     
     Console.Write("\n")

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

#5
اقتباس
القصد من سؤالي هو : تحويل الحرف A مثلاً إلى 01000000 وهكذا ...............

و الرقم 5 إلى 00000101 ............................

كيف يعني تحولها .. هي اصلا مخزنة في الذاكرة على شكل binary

#6

أعتقد هو بيقصد أنه يحول char مثلا يا حسن أو string الى مصفوفة []byte حتى تتنساب مع داله أو كونستركتر.

اقتباس
لأن الوسيط الأول هو مصفوفة من البايتات و ليس البتات ؟؟
ماذا تستخدم ؟

عموما أنا أعتقد مثلا أن يكون كودك بشكل مثل هذا ::

byte[] myBytes = System.Text.Encoding.Unicode.GetBytes("YourStringOrWhatever");
yourStreamObject.Write(myBytes,0,myBytes.Lenght);

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#7

يبدو أن سؤالي غامض شوي ....

رح نعتبر أنو رح أكتب على File ( بدلاً عن الكتابة على Network Stream )

بس بدل ما اكتب على file مثلاً كلمة Binary بكتبها بالشكل التالي :

B I N A R Y

01011001 01010010 01000001 01001110 01001001 01000010

بالتالي بكتب جوا الملف 01011001 01010010 01000001 01001110 01001001 01000010 (لا تسألوني ليش كل هالتعقيد : لأنو الجواب عند المدرس مش عندي ) ..................

الأخ TarekNajem04 طرح فكرة تحويلها إلى مصفوفة من البتات و لكن الكود التالي :

FileStream fs=File.Create("C:\\1.bin"); 
fs.Write(Data, Offset, Length);

المشكلة يأخ TarekNajem04 أنو الوسيط الأول هو مصفوفة بايتات و ليس بتات !!!!!!!!!!!!!!!!!!

أم بالنسبة إلى الكود :

اقتباس

byte[] data = new byte[binaryData.Lenght];

   BinaryData.CopyTo(data, 0);

for( int i = 0; i <= data.Lenght; i++)

    {

        Console.Write(data.ToString());

    }

   

    Console.Write("\n")

فكانت النتيجة مخيبة للآمال ..............

تم تعديل هذه المشاركة بواسطة informat في 10 ديسمبر 2005 في 02:51

#8

لتوضيح فقط

أخي الكريم حسان هذا من وجهة نظر ال C و ++C لأنهما لا يملكان تحقق لنوع Type Checking فأنت تستطيع أن تخترق مجال النوع في أي لحظة

هذا مثال ولكن أتمنى أن يكون الكود الذي بداخله صحيح فأنا منذ فتره لم أعمل في ++C

     // In C 
     char *YourBuf = "test2";
     unsigned  int *NewBuf= (unsigned  Int *) yourbuf;
     // In C++
     unsigned int *NewBuf1 = reinterpret_cast<unsigned int *>( yourbuf  );

فهذ النوع من التحويل ممنوع في اللغات العالية المستوى لذلك تسمى لغات آمنة لأنها تفرض الكثير من القيود على عمليات التحويل.

تم تعديل هذه المشاركة بواسطة TarekNajem04 في 10 ديسمبر 2005 في 02:33

لا تفعل إلا ما تستطيع أن تقوله ولا تقول إلا ما تسطيع أن تفعله

اللهم علمنا ما ينفعنا ونفعنا بما علمتنا وهب لنا من لدنك ولياً مرشدا

كلما أدبني الدهر أراني نقص عقلي ... وإذا ما زدت علماً زادني علماً بجهلي

أخوكم في الله أبو المجد

هيا نتعلم بعض المبادء لنطرق باب الإحتراف ************** جديد الدروس ( Application Domains and Assemblies)

التوقيت في دمشق:

<embed src="http://www.clocklink.com/clocks/0006-Gray.swf?TimeZone=R1T" width="200" height="240" wmode="transparent" type="application/x-shockwave-flash">

هذا الموضوع مغلق.

مواضيع مشابهة