01-05-18, 03:12 PM
(آخر تعديل لهذه المشاركة : 01-05-18, 03:45 PM {2} بواسطة silverlight.)
في المشاركة السابقة تم توضيح كيفية تحويل الحرف الأبجدي الي رقم
و الخلاصة من الجزء الأول تنحصر في الدوال التالية
ملحوظة :
يجب أن تضع في اعتبارك دائما ان الحروف الأبجدية و التي رقم الأسكي الخاص بها عبارة عن رقم زوجي تعطي رقم أكبر من الحروف الأبجدية التي رقم الأسكي الخاص بها عبارة عن رقم فردي
ولقد تم التعديل علي الكود قليلا لتفادي هذه المشكلة
الدوال:
1- تحويل الحرف الي بيناري
2- تحويل البيناري الي رقم
الإستخدام
عملية استرجاع الحرف مرة ثانية من الرقم
تعتمد علي تحويل الرقم الي بيناري
ثم تحويل البيناري الي رقم يمثل رقم الأسكي الخاص بالحرف الأبجدي
و يمكنكم استخدام الدول التالية
الدوال:
1- تحويل الرقم الي بيناري ثانية
وهنا نعيد بناء البيناري من الحروف التي هي عبارة عن ارقام
2- تحويل البيناري الي رقم الأسكي ثانية
الإستخدام
المثال التالي يوضخ كيفية تحويل كلمة واخدة الي أرقام
باستخدام الدوال اعلاه
لو نظرت الي الناتج اعلاه ستجد ان الحروف التي لها رقم اسكي فردي تعطي قيمة اقل من الحروف التي لها رقم اسكي زوجي
و لتفادي ذلك يمكن التعديل قليلا علي الدالة الي تقوم بتحويل البيناري الي رقم لتكون كالتالي
أعتقد أنه لن يكون صعبا علي القارئ أن يقوم باسترجاع البيانات مرة ثانية
ملحوظة هامة:
لا تحاول تحويل مجموعة من الكلمات باستخدام الأسلوب اعلاه لأن الأمر يختاج الي كتابة المزيد من الدول و لهذا حديث أخر
طبعا الموضوع مجرد توضيح لبعض الأفكار و هناك اساليب اخري لتحويل الحرف الي ارقام و هذا متروك لمخيلة القارئ و فهمه الجيد للفكرة التي طرحناها
تقبلوا تحياتي
و الخلاصة من الجزء الأول تنحصر في الدوال التالية
ملحوظة :
يجب أن تضع في اعتبارك دائما ان الحروف الأبجدية و التي رقم الأسكي الخاص بها عبارة عن رقم زوجي تعطي رقم أكبر من الحروف الأبجدية التي رقم الأسكي الخاص بها عبارة عن رقم فردي
ولقد تم التعديل علي الكود قليلا لتفادي هذه المشكلة
الدوال:
1- تحويل الحرف الي بيناري
PHP كود :
Private Function ConvertToBinary(code As Integer) As String
Dim result As String = String.Empty
While code > AscW(Char.MinValue)
Dim v As Integer = (code And 1)
result = v.ToString + result
code = code >> 1
End While
Return result
End Function
2- تحويل البيناري الي رقم
PHP كود :
Private Function Zip(binary As String) As String
Dim values As List(Of Integer) = New List(Of Integer)()
Dim count As Integer = 1
Dim current As Char = binary(0)
Dim i As Integer = 1
While (i < binary.Length)
If (current = binary(i)) Then
count = (count + 1)
Else
values.Add(count)
count = 1
current = binary(i)
End If
i = (i + 1)
End While
values.Add(count)
' لتفادي مشكلة الحروف التي لها قيمة أسكي عبارة عن رقم زوجي أو فردي
If (values.Count - 1) Mod 2 = 0 Then
values.Add(0)
End If
' تحويل المصفوفة الي تكست
Dim result As String = String.Empty
For Each v As Integer In values
result += v.ToString
Next
Return result
End Function
الإستخدام
PHP كود :
Dim chr As Char = "b"c
Dim code As Integer = AscW(chr)
Dim binary As String = Me.ConvertToBinary(code)
Dim padWidth As Integer = 2
binary = binary.PadLeft(binary.Length + padWidth, "0"c)
Dim zipped As String = Me.Zip(binary)
عملية استرجاع الحرف مرة ثانية من الرقم
تعتمد علي تحويل الرقم الي بيناري
ثم تحويل البيناري الي رقم يمثل رقم الأسكي الخاص بالحرف الأبجدي
و يمكنكم استخدام الدول التالية
الدوال:
1- تحويل الرقم الي بيناري ثانية
وهنا نعيد بناء البيناري من الحروف التي هي عبارة عن ارقام
PHP كود :
Private Function UnZip(s As String) As String
Dim result As String = ""
Dim i As Integer = 0
While i < s.Length
result += New String("0"c, CInt(s(i).ToString))
result += New String("1"c, CInt(s(i + 1).ToString))
i = (i + 2)
End While
Return result
End Function
2- تحويل البيناري الي رقم الأسكي ثانية
PHP كود :
Private Function ConvertFromBinary(s As String) As Integer
Dim result As Integer = 0
Dim values As Char() = s.Reverse.ToArray
Dim i As Integer = 0
While i < values.Length
If values(i) = "1"c Then
result = CInt(Math.Pow(2, i)) + result
End If
i = (i + 1)
End While
Return result
End Function
الإستخدام
PHP كود :
' تحويل الرقم الي بيناري مرة ثانية
Dim unzipped As String = Me.UnZip(zipped)
' تحويل البيناري الي رقم
Dim value As String = Me.ConvertFromBinary(unzipped)
' تحويل الرقم الي حرف مرة ثانية
Dim result As Char = ChrW(CInt(value))
المثال التالي يوضخ كيفية تحويل كلمة واخدة الي أرقام
باستخدام الدوال اعلاه
PHP كود :
Dim binaryValue As String = String.Empty
Dim s As String = "abcds"
Dim chars As Char() = s.ToCharArray
For i = 0 To chars.Length - 1
Dim c As Char = chars(i)
Dim asciCode As Integer = AscW(c)
Dim b As String = Me.ConvertToBinary(asciCode)
Dim pad As Integer = 4
b = b.PadLeft(b.Length + pad, "0"c)
binaryValue += Me.Zip(b)
binaryValue += " "c
Next
binaryValue = binaryValue.TrimEnd(" "c)
و لتفادي ذلك يمكن التعديل قليلا علي الدالة الي تقوم بتحويل البيناري الي رقم لتكون كالتالي
PHP كود :
Private Function Zip(binary As String) As String
Dim values As List(Of Integer) = New List(Of Integer)()
Dim count As Integer = 1
Dim current As Char = binary(0)
Dim i As Integer = 1
While (i < binary.Length)
If (current = binary(i)) Then
count = (count + 1)
Else
values.Add(count)
count = 1
current = binary(i)
End If
i = (i + 1)
End While
values.Add(count)
' لتفادي مشكلة الحروف التي لها قيمة أسكي عبارة عن رقم زوجي أو فردي
If (values.Count - 1) Mod 2 = 0 Then
values.Add(0)
Else
values.Add(0)
values.Add(0)
End If
' تحويل المصفوفة الي تكست
Dim result As String = String.Empty
For Each v As Integer In values
result += v.ToString
Next
Return result
End Function
أعتقد أنه لن يكون صعبا علي القارئ أن يقوم باسترجاع البيانات مرة ثانية
ملحوظة هامة:
لا تحاول تحويل مجموعة من الكلمات باستخدام الأسلوب اعلاه لأن الأمر يختاج الي كتابة المزيد من الدول و لهذا حديث أخر
طبعا الموضوع مجرد توضيح لبعض الأفكار و هناك اساليب اخري لتحويل الحرف الي ارقام و هذا متروك لمخيلة القارئ و فهمه الجيد للفكرة التي طرحناها
تقبلوا تحياتي
Retired

