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

خطأين, ("-" mathop) مع Chr type و InPtr في DirectCast

مغلق
بدأه Xacker في 18 يوليو 2006 · 5 رد · 473 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
Public Shared Function decode(ByVal data As String) As Byte()
	  Dim buffer1 As Byte() = New Byte((data.Length / 2)  - 1) {}
	  Dim text1 As String = data.ToLower
	  Dim num1 As Integer = 0
	  Do While (num1 < text1.Length)
			Dim buffer2 As Byte()
			Dim ptr1 As IntPtr
			Dim ch1 As Char = text1.Chars(num1)
			Dim ch2 As Char = text1.Chars((num1 + 1))
			Dim num2 As Integer = (num1 / 2)
			If (ch1 < "a"c) Then
				  buffer1(num2) = CByte(((ch1 - "0"c) << 4))
			Else
				  buffer1(num2) = CByte((((ch1 - "a"c) + ChrW(10)) << 4))
			End If
			If (ch2 < "a"c) Then
				  buffer2 = buffer1(CInt(ptr1 = DirectCast(num2, IntPtr))) = CByte((buffer2(CInt(ptr1)) + CByte((ch2 - "0"c))))
			Else
				  buffer2 = buffer1(CInt(ptr1 = DirectCast(num2, IntPtr))) = CByte((buffer2(CInt(ptr1)) + CByte(((ch2 - "a"c) + ChrW(10)))))
			End If
			num1 = (num1 + 2)
	  Loop
	  Return buffer1
End Function

لا ادري ما الخطا في هذا, المشكلة تكمن في المنطقة:

ch1 - "0"c

حيث يظهر تنبيه بان اشارة الطرح غير مسموحة على الرغم من التصريح عن المتحولين انهما من نفس النوع!

وخطأ اخر في السطر

buffer2 = buffer1(CInt(ptr1 = DirectCast(num2, IntPtr))) = CByte((buffer2(CInt(ptr1)) + CByte((ch2 - "0"c))))

اختبرت هذا على MSVS 2003 و MSVS 2005 ولم افلح في معرفة السبب.

هل يمكن لاحدكم تفسير المشكلة؟ شكرا.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#2

السلام عليكم

بالنسبة للخطأ الاول لا يمكن استخدام العمليات الحسابية الا مع الارقام،،،ولذا استخدم الدالة AscW للحصول على القيمة الممثلة للعدد

الخطأ الثانى استخدم ctype

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#3

تنبيه بخصوص DirectCast فهى تستخدم فقط للتحويل بين الانواع التى بينها علاقة (علاقة وراثية)

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#4

شكرا SOLO, اوكيه بالنسبة للخطأ الاول عدلته.. لكن الخطا الثاني, CType بدلا من CInt او لتحويل الـ DirectCast ؟

وبخصوص العلاقة, هل تقصد ان InPtr لا يوجد لها علاقة مع نوع num2 ؟ لاني نوعا ما رايت نفس الاستخدام في احد البرامج من قبل..

معلش انا بعدني جديد على مسائل هالشي وكله عشان بس تحليل لا عم اكتب برنامج ولا هم يحزنون :P

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

اخى x ما قصدته بالعلاقة هو العلاقة الوراثية اى ان احد النوعين لابد ان يكون يرث من النوع الاخر

num2 هى من النوع integer ولا علاقة بينها وبين intptr فكلاهما structure وهى من الانواع ذات القيمة ولا ترث من احد ولا تورث،،لتتضح الصورة اكثر لايمكنك استخدام DirectCast للتحويل بين Short وInteger وكلاهما عدد صحيح

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#6

شكرا يا مان, ادركت الان ما تقصد خصوصا بعد البحث في MSDN :)

تم تعديل هذه المشاركة بواسطة Xacker في 18 يوليو 2006 في 08:52

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

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

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