![]() |
|
بناء نظام ترميز ثنائي Binary Encoding - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : بناء نظام ترميز ثنائي Binary Encoding (/showthread.php?tid=24714) |
بناء نظام ترميز ثنائي Binary Encoding - silverlight - 29-04-18 مقدمة في هذا الموضوع سنوضح كيفية بناء نظام ترميز ثنائي من الصفر بدون أن تعتمد علي الكلاسات الموجودة في الدوت نت إلا في ما تيسر مثل استخدام الأساسيات فقط من الأنواع التالية String او Long أو Integer أو Byte أو المصفوفات .... الخ والفكرة هنا يمكن تقسيمها الي مرحلتين المرحلة الأولي: تحويل حرف أبجدي الي رقم و هذا الرقم قد يكون من النوع Integer أو من النوع Long عموما تحديد النوع راجع لك مثلا أنا شخصيا أفضل النوع Long حتي يكون الكود الخاص بي يدعم الحروف الانجليزية و العربية معا المرحلة الثانية: استعادة الحرف الأبجدي من هذا الرقم وللتوضيح أكثر قليلا فإنه يمكن تفسيير الأمر كالتالي 1- نحدد الحرف الأبجدي 2- نحصل علي قيمة الأسكي الخاصة بهذا الحرف ونقوم بتحويلها إلي بيناري تكست 3- نقوم بتحويل البيناري تكست الي رقم هذا الرقم مثلا قد يكون من النوع Long 4- و بعد ذلك و بعملية عكسية نعيد الرقم الي حرف أبجدي مرة ثانية بشكل عام هذا الموضوع ممكن اعتباره أساس جيد للاستخدام في موضوعات مثل الباركود او في ضغط البيانات او في تغيير شكل البيانات مثال توضيحي: الحرف الأبجدي ------------------------------------------------------------------------------------------- A رقم الأسكي الخاص به يساوي ------------------------------------------------------------------------ 65 وعند تجويله مثلا الي بيناري تكست قد يعطينا الشكل ----------------------------------------------- 001000001 وعند تحويل البيناري تكست الي رقم يمكننا أن نحصل علي الشكل هذا --------------------------- 20115011 أو يمكن أن نحصل علي الشكل هذا ------------------------------------------------------------------- 2151 أو يمكن أن نحصل علي الشكل هذا ------------------------------------------------------------------------- 215100 عموما الفكرة تنحصر في حساب عدد مرات تكرار الرقم في البيناري تكست ثم بعد ذلك نصيف الحرف المتكرر علي يمين هذا الرقم مثلا الييناري 00000011 الصفر متكرر 6 مرات و الرقم واحد متكرر مرتين و بالتالي نحصل علي الرقم 6021 حيث الرفم 6 يمثل عدد مرات تكرار الرقم صفر و الحرف الثاني هو الرقم صفر نفسه فنحصل غلي 60 و الرقم 2 هو عدد مرات تكرار الرقم واحد و الحرف الذي يليه هو الرقم واحد نفسه فنحصل علي 21 ويتم دمجهم معا فنحصل غلي الرقم 6021 أو يمكن الاستغناء عن اضافة الحرف الأبجدي تماما مثلا البيناري اعلاه 00000011 يمكن تحويله الي الرقم 62 وهنا نحن نحسب عدد مرات التكرار فقط بدون أن نضيف الحرف صفر او الحرف واحد الكود: الكود التالي يوضح واحدة من الطرق للتعامل مع الحروف الأبجدية و تحويلها الي بيناري ثم الي رقم PHP كود : ' تعريف الحرف الأبجديالكود أعلاه يمكن تحويله الي دوال كالتالي PHP كود : Private Function ZipToString(chr As Char) As Stringأتمني أن يكون الموضوع مفيدا للبعض منكم ولاحقا سوف أكمل بقية الموضوع تقبلوا تحياتي RE: بناء نظام ترميز ثنائي Binary Encoding - الكاتب - 29-04-18 جميل اخي العزيز هذا الموضوع مهم ومتشعب جداً ممكن تفيدك الصورة التالية RE: بناء نظام ترميز ثنائي Binary Encoding - silverlight - 30-04-18 شكرا لك علي جدول الأسكي حسابات الاسكي نممكن تنفيذها باستخدام الكود التالي مثلا للحرف الانجليزي A كود : Dim chr As Char = "A"cو نفس الكود يمكن استخدامه مع الحروف العربية مثلا للحرف العربي ب PHP كود : Dim chr As Char = "ب"cلكن ومن أجل بناء نظام ترميز من الصفر نحتاج ان نقوم بعمل Pad لهذا البيناري تكست ونضع عدد معين من الأصفار علي يساره وهذا لسهولة استرداد الحرف لاحقا بعد ترميزه شكرا لمشاركتك اخي الفاضل RE: بناء نظام ترميز ثنائي Binary Encoding - silverlight - 01-05-18 في المشاركة السابقة تم توضيح كيفية تحويل الحرف الأبجدي الي رقم و الخلاصة من الجزء الأول تنحصر في الدوال التالية ملحوظة : يجب أن تضع في اعتبارك دائما ان الحروف الأبجدية و التي رقم الأسكي الخاص بها عبارة عن رقم زوجي تعطي رقم أكبر من الحروف الأبجدية التي رقم الأسكي الخاص بها عبارة عن رقم فردي ولقد تم التعديل علي الكود قليلا لتفادي هذه المشكلة الدوال: 1- تحويل الحرف الي بيناري PHP كود : Private Function ConvertToBinary(code As Integer) As String2- تحويل البيناري الي رقم PHP كود : Private Function Zip(binary As String) As Stringالإستخدام PHP كود : Dim chr As Char = "b"cعملية استرجاع الحرف مرة ثانية من الرقم تعتمد علي تحويل الرقم الي بيناري ثم تحويل البيناري الي رقم يمثل رقم الأسكي الخاص بالحرف الأبجدي و يمكنكم استخدام الدول التالية الدوال: 1- تحويل الرقم الي بيناري ثانية وهنا نعيد بناء البيناري من الحروف التي هي عبارة عن ارقام PHP كود : Private Function UnZip(s As String) As String2- تحويل البيناري الي رقم الأسكي ثانية PHP كود : Private Function ConvertFromBinary(s As String) As Integerالإستخدام PHP كود : ' تحويل الرقم الي بيناري مرة ثانية المثال التالي يوضخ كيفية تحويل كلمة واخدة الي أرقام باستخدام الدوال اعلاه PHP كود : Dim binaryValue As String = String.Emptyو لتفادي ذلك يمكن التعديل قليلا علي الدالة الي تقوم بتحويل البيناري الي رقم لتكون كالتالي PHP كود : Private Function Zip(binary As String) As Stringأعتقد أنه لن يكون صعبا علي القارئ أن يقوم باسترجاع البيانات مرة ثانية ملحوظة هامة: لا تحاول تحويل مجموعة من الكلمات باستخدام الأسلوب اعلاه لأن الأمر يختاج الي كتابة المزيد من الدول و لهذا حديث أخر طبعا الموضوع مجرد توضيح لبعض الأفكار و هناك اساليب اخري لتحويل الحرف الي ارقام و هذا متروك لمخيلة القارئ و فهمه الجيد للفكرة التي طرحناها تقبلوا تحياتي |