اطلاعیه

Collapse
No announcement yet.

مشکل در تبدیل رشته به حروف در کدویژن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در تبدیل رشته به حروف در کدویژن

    سلام دوستان من یه رشته داخل کدویژن دارم که اسکی هست و داخلش حرف هم هست مثلا کد هگز "0XFE" که به صورت اسکی داخل یه آرایه هست.حالا میخوام اونا از اسکی خارج کنم و یه کد هگز واقعی با همین مقدار OXFE بهم بده.لطفا کمکم کنید چطوری این کارو بکنم

    #2
    پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

    خواهش میکنم کمکم کنید.خیلی حیاتیه :angry: :angry: :angry:

    دیدگاه


      #3
      پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

      خوب این یعنی چه مگه الان کد شما در داخل حافظه خوب بهصورت اگز است دیگه

      دیدگاه


        #4
        پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

        فکر نمیکنم برای اینکار در کدویژن تابعی آماده داشته باشیم
        اما روش کار اینه:
        1- عناصر داخل رشته رو یکی یکی میخونی تا به کاراکتر 'x' یا 'X' برسی
        2- عنصر بعدی رو میخونی و با توابع isdigit, isxdigit, toupper مشخص میکنی که این عنصر عدد هست یا کاراکتر بین A, F . اگر عدد بود 48 تا ازش کم میکنی و بعد در 16 ضرب میکنی. اگر حرف بود ابتدا به حروف بزرگ تبدیل میکنی(با تابع toupper) بعد 55 تا ازش کم میکنی (تبدیل حرف به عدد مثلا A باید بشه 10) حالا در 16 ضرب میکنی
        3- عنصر بعدی رو هم همین بلا رو جز ضرب کردن در 16 سرش میاری و با عدد بدست آمده در مرحله 2 جمع میکنی و تمام
        * به رشته های دارای ایراد هم توجه داشته باش مثلا اولین کاراکتر باید '0' و دومین کاراکتر باید 'x' یا 'X' باشه. در صورتیکه این مشکل باشه ؛ تابع مثلا عدد -1 رو برگردونه

        دیدگاه


          #5
          پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

          یه سوال آقای mojalan
          این توابعی که نام بردید تو بسکام هستن یا کدویژن؟ میشه یه توضیحی در مورد کارشون بدید و تفاوت اونها رو با هم بگید.

          دیدگاه


            #6
            پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

            بسیار سپاسگذار از مهندس mojalan
            واسه منم سوال پیش اومده که این توابع کجا هستش و توی کدوم کتابخونه هست
            یه سوال دیگه اینکه این اعمال ریاضی مثلا 48 تا ازش کم میکنی و بعد در 16 ضرب میکنی یا 55 تا ازش کم میکنی و بعد در 16 ضرب میکنی از کجا اومده؟دلیل این اعمال ریاضی چیه

            اگه امکان داره بیشتر توضیح بدید ممنون میشم :read:

            دیدگاه


              #7
              پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

              مهدی کربلایی عزیز
              کدهام به صورت هگز هستند اما اسکی من میخوام از اسکی به هگز واقعی تبدیلش کنم یعنی از اسکی در بیاد اما اگه بخوام از اسکی درش بیارم از دستور atoi باید استفاده کنم که فقط اعداد را میتونه تبدیل کنه اما حروف را نمیتونه من میخوام حروف هم تبدیل کنم

              دیدگاه


                #8
                پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                با سلام،

                یه نگاهی به این مثالی که نوشتم بنداز، فایل پروتئوس هم داره!

                http://s3.picofile.com/file/7514912040/Hex.rar.html

                ( پی نوشت : روتین sHex2Dec اصلاح شد! )
                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه


                  #9
                  پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                  aivhl ممنون از توجهتون
                  اگه ممکنه درمورد برنامه و روش انجام کار یه مقدار توضیح بدید
                  سپاسگذارم

                  دیدگاه


                    #10
                    پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                    نوشته اصلی توسط mohammadttl
                    واسه منم سوال پیش اومده که این توابع کجا هستش و توی کدوم کتابخونه هست
                    یه سوال دیگه اینکه این اعمال ریاضی مثلا 48 تا ازش کم میکنی و بعد در 16 ضرب میکنی یا 55 تا ازش کم میکنی و بعد در 16 ضرب میکنی از کجا اومده؟دلیل این اعمال ریاضی چیه
                    1- این توابع سی هستند که در کدویژن هم ساپورت میشه.
                    2- اینکه 48 تا کم کنیم یا 55 یا هرچیز دیگه ای مربوط میشه جدول کده اسکی هر کاراکتر بعنوان مثال کاراکتر 'A' بزرگ دارای کد اسکی 65 و مثلا کاراکتر '0' صفر دارای کد اسکی 48 هست. توجه کنید که هر کاراکتر در واقع یه بایت هست که داخلش کد اسکی مورد نظر نوشته شده اما میشه به چشم یه عدد هم بهش نگاه کرد
                    3- ضربدر 16 برای عدد پر ارزشتر هگز نوشته شده تا اونو در واقع 4 تا شیفت بده به چپ مثلا عدد 0x15 هگز معادل عدد 5+16=21 دسیمال هست و 0x23 معادل 3+32=35. در نتیجه نیبل پرارزش باید در 16 ضرب بشه

                    دیدگاه


                      #11
                      پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                      mojalan
                      بسیار بسیار سپاسگذارم ازتون :wow: :wow: :wow: :wow: :applause: :applause: :applause: :applause:

                      دیدگاه


                        #12
                        پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                        نوشته اصلی توسط mohammadttl
                        aivhl ممنون از توجهتون
                        اگه ممکنه درمورد برنامه و روش انجام کار یه مقدار توضیح بدید
                        سپاسگذارم
                        با سلام،

                        اصول کار همونی هست که جناب mojalan توضیح دادن....

                        در اینجا یک روتین به نام sHex2Dec وجود داره که اسکی هگز مورد نظر با فرض وجود یک 0x در ابتدای اون به همراه مقدار طولش، با احتساب 0\ انتهاش بهش پاس میشه، مثلا برای 0x123 میشه این :
                        sHex2Dec("0x123", 6);

                        اسکی هگز مورد نظر میتونه حداکثر 4 بایتی باشه ( یعنی مقدارش حداکثر Long باشه )

                        در این روتین، از سمت راست اسکی دریافتی، دو تا، دو تا جدا شده و با رجوع به روتین DECval مقدار عددی متناظر هر کدوم استخراج و به این روش به عدد متناظر یک بایتی تبدیل میشه :
                        (DECval(SHin[i-1]) <<4) +DECval(SHin[i])

                        البته، روتین DECval برای کاراکترهای غیرمجاز، عدد صفر رو بر میگردونه!

                        برای جلوگیری از انجام عملیات اضافی محاسباتی و رسیدن به حداکثر سرعت ممکن، یونیون زیر که یک Long با امکان دسترسی بایتی به اون هست، درنظر گرفته شده :
                        union Read_Buff {
                        unsigned long DECout;
                        unsigned char Dbyte[4];
                        };

                        لذا در روتین sHex2Dec ، اعداد بدست اومده برای هر بایت مستقیما در بایت متناظر این یونیون ذخیره میشه :
                        OUTtemp.Dbyte[j] = (DECval(SHin[i-1]) <<4) +DECval(SHin[i]);

                        و نهایتا، روتین sHex2Dec مقدار Long ی رو برمیگردونه OUTtemp.DECout که در اصل مقدار عددی اسکی هگز پاس شده به اون خواهد بود.

                        توجه : جهت جلوگیری از خطای محاسباتی، در ابتدای روتین sHex2Dec باید مقدار OUTtemp.DECout برابر صفر بشه که من فراموشش کردم، خودتون اضافه اش کنید : :mrgreen:
                        OUTtemp.DECout = 0;
                        کد:
                        unsigned long sHex2Dec(char *SHin, unsigned char SHlen)
                        {
                        	unsigned char								i, j;
                        
                        	OUTtemp.DECout = 0;
                        	
                        	for(i=SHlen-2, j=0; i>1; i-=2, j++)
                        		OUTtemp.Dbyte[j] = (DECval(SHin[i-1]) <<4) +DECval(SHin[i]);
                        	
                        	return OUTtemp.DECout;
                        }	//sHex2Dec

                        :mrgreen:
                        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                        Sh_Nourbakhsh@Yahoo.com

                        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                        دیدگاه


                          #13
                          پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                          جناب مهندس شهرام نوربخش راد
                          بسیار از لطفتون سپاسگذارم که وقت گذوشتید.خیلی خیلی ممنونم و همچنین شرمندتونم که وقتتون را گرفتم.
                          بسیار عالی بود :applause: :applause: :applause: :applause: :wow: :wow:

                          همچنین از مهندس mojalan هم تشکر و قدردانی میکنم.بسیار عالی و مختصر بود. :wow: :wow:



                          قصد دارم تابعشو بنویسم.اگه باز هم مشکلی برخوردم ازتون کمک میگیرم البته اگه لیاقتشو داشته باشم

                          دیدگاه


                            #14
                            پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                            سلام مجدد خدمت دوستان عزیز
                            از کمکهاتون خیلی خیلی ممنونم
                            بسیار سپاس
                            بنده تابع تبدیل اسکی هگز به دسیمالو نوشتم اما گویا مشکل داره و کارشو درست انجام نمیده البته مشکلم اینه که وقتی یه هگز مثل FC بهش میدم و خروجی از تابع میگیرم روی ال سی دی عددو درست نشون میده اما اون عددو روی پورت اشتباه نشون میده
                            ممنون میشم اگه کمکم کنید

                            اینم تابعش البته ببخشید خیلی سطح پایینه

                            char ahtod (char asciihex[])
                            {
                            char i;
                            bit t;
                            char eq1,eq2,eq;


                            for(i=0;i<2;i++)
                            {
                            if(i==0)
                            {
                            t=isalpha (asciihex[0]);
                            if(t==1) eq1=(toupper(asciihex[0])-55)*16;
                            if(t==0) eq1=(asciihex[0]-48)*16;
                            }


                            if(i==1)
                            {
                            t=isalpha (asciihex[1]);
                            if(t==1) eq2=(toupper(asciihex[1])-55);
                            if(t==0) eq2=(asciihex[1]-48);
                            }

                            }

                            eq=eq1+eq2;
                            return eq;


                            }


                            :angry: :angry: :angry:

                            دیدگاه


                              #15
                              پاسخ : مشکل در تبدیل رشته به حروف در کدویژن

                              ببخشید دوستان یادم رفت کاملتر توضیح بدم
                              هدف کلیم اینه که اطلاعاتمو که به صورت هگز هستشو از sd بخونم این کدها بدون 0x داخل یه فایله تکست هستش و من هر دوبایت را میخونم و داخل یه بافری میریزم ومیخوام حالا اون اطلاعات بافر رو به عدد قابل استفاده تبدیل کنم
                              این موضوع کلی بود
                              حالا من وقتی از sd میخونم مشکلی که بالا گفتم پیش میاد اما وقتی خودم توی بافر میکرو یه اسکی دوبایتی مینویسم و بعد با این تابع تبدیلش میکنم همه چیز درسته و حتی روی پورت هم به درستی نشون میده
                              حالا نمیدونم چرا با sdاین مشکل هست که تبدیل درست انجام میشه اما روی پورت درست نشون نمیده
                              :angry: :angry: :angry: oo:

                              دیدگاه

                              لطفا صبر کنید...
                              X