واضح آرشیو وب فارسی:سایت ریسک: تبدیل رشته به باینری (برنامه) i_lover3000 26 فروردين 1387, 02:14سلام :) من امروز یه برنامه کوچیک پیدا کردم که رشته رو به باینری تبدیل میکنه :wink: می خواستم ببینم کسی می تونه یکم توضیح در موردش کدش بهم بگه :neutral: خیلی ممنون :sad: موفق باشید. the_king 26 فروردين 1387, 18:57نویسنده این برنامه یا کدش رو واسه ویژوال بیسیک 5 نوشته بوده که تابع StrReverse رو نمی شناسه و یا یادش رفته بوده که چنین تابعی هم هست. این تابع همون کاری رو انجام میده که StrRev انجام میده، یعنی رشته شما رو برعکس می کنه، مثلا "ABC" رو به "CBA" تبدیل می کنه : Public Function StrRev(ByVal Source As String) As String Dim Buffer As String While Source <> "" Buffer = Buffer & Right$(Source, 1) Source = Left$(Source, Len(Source) - 1) Wend StrRev = Buffer End Function اگه من این تابع رو می نوشتم : Public Function StrRev(ByVal Source As String) As String Dim Index As Long For Index = Len(Source) To 1 Step -1 StrRev = StrRev & Mid(Source, Index, 1) Next End Function تابع Str2Bin کاراکتر به کاراکتر یک رشته را به معادل Binary هشت بیتی (یک بایت) تبدیل می کند و به هم می چسباند. در واقع این تابع اصلی برنامه است : Public Function Str2Bin(ByVal Source As String) As String Dim Buffer As String, TempBuffer As String, CheckValue As String For i = 1 To Len(Source) CheckValue = Asc(Mid(Source, i, 1)) While CheckValue <> 0 TempBuffer = TempBuffer & (CheckValue Mod 2) CheckValue = CheckValue 2 Wend While Len(TempBuffer) < 8 TempBuffer = TempBuffer & "0" Wend Buffer = Buffer & StrRev(TempBuffer) TempBuffer = "" Next i Str2Bin = Buffer End Function اگه من این تابع را می نوشتم : Public Function Str2Bin(ByVal Source As String) As String Dim Index As Long, Code As Long, Bit As Long For Index = 1 To Len(Source) Code = Asc(Mid(Source, Index, 1)) For Bit = 7 To 0 Step -1 Str2Bin = Str2Bin & IIf((Code And (2 ^ Bit)) = 0, "0", "1") Next Next End Function دو مورد در کد فرم اصلی وجود دارد : If Text1.Text = "" Then Exit Sub Text1.Text = Replace(Text1.Text, vbCrLf, " ") Text2.Text = Str2Bin(Text1.Text) ابتدا چک می کنه که اگه متنی در Text1 نوشته نشده از روتین خارج بشه و سراغ عملیات تبدیل نره. در سطر دوم دو کاراکتر vbCrLf که در انتهای سطر ها به عنوان نماد Enter وجود دارند را به یک کاراکتر فاصله تبدیل می کنه. در سطر سوم هم معدل باینری رشته را در Text2 می نویسه. مورد دوم در کد فراخوانی اولیه فرم است : Private Sub Form_Load() For Each Ctrl In Me Ctrl.Font = "Tahoma" Next End Sub این کد هر کنترلی که در داخل مجموعه Me (فرم اصلی برنامه) وجود داره رو در یک حلقه به عنوان متغیر Ctrl فرض می کنه. بعد در داخل حلقه فونت آنها را به "Tahoma" تغییر می دهد. با اجرا شدن این کد تمامی کنترلهای داخل فرم از فونت Tahoma استفاده می کنند. تصور می کنم که تشریح کد کوتاه تر و ساده تری که خودم نوشته ام (نیازی به تابع StrRev یا StrReverse نداره) بهتر باشه : پس دوباره اونرو اینجا سطر به سطر می نویسم : Public Function Str2Bin(ByVal Source As String) As String یک تابع که ورودی اش یک رشته با عنوان Source است و خروجی اش هم یک رشته String است. Dim Index As Long, Code As Long, Bit As Long سه متغیر محلی در این تابع وجود دارند که Index شماره کاراکتری است که قرار است تبدیل شود. Code کد عددی آن کاراکتر در جدول ASCII است. Bit اندیس ای است که معدل بیتی اش استخراج می شود، بین 0 الی 7. For Index = 1 To Len(Source) ابتدا در یک حلقه کلیه کاراکتر ها را با Index از شماره 1 الی طول رشته Source پیمایش می کنیم. Code = Asc(Mid(Source, Index, 1)) Code کد عددی کاراکتری را در بر می گیرد که Index شماره آنرا نشان می دهد. For Bit = 7 To 0 Step -1 حالا باید از بیت اندیس 7 الی اندیس 0 را در کد کاراکتر پیمایش کنیم (از ارزش بالاتر به سمت ارزش پایین تر). این پیمایش برعکس ما را از بکارگیری تابع StrRev و StrReverse بی نیاز می کند. Str2Bin = Str2Bin & IIf((Code And (2 ^ Bit)) = 0, "0", "1") و در انتها 2 را به توان شماره اندیس (Bit) می رسانیم و در کد کاراکتر (Code) با عملگر AND چک می کنیم. اگر حاصل صفر باشد یعنی آن بیت صفر است وگرنه یک است. در هر صورت آنرا به مقادیر قبلی داخل رشته Str2Bin اضافه می کنیم. Next Next End Function در انتها دو حلقه For بسته می شوند و تابع با مقدار خروجی Str2Bin خاتمه می یابد. i_lover3000 27 فروردين 1387, 02:00خیلی ممنون ، خیلی لطف کردین توضیحات خیلی خیلی کاملی بود !!!!
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 3437]