سلام به همگي.
يه سري مشكلات در كامپايلرهاي زبان C دارم ، گفتم يه تاپيك بزنم و مشكلات رو مطرح كنم و دوستاني كه مي تونن كمك كنن.
1- براي تبديل عدد دسيمال ( 10 دهي ) به باينري ( 2 دويي ) بايد خودمون يه تابع تعريف كنيم يا تابعش موجود هست ؟ اگر هست ، در چه هدر فايلي هست و syntax اش چيه ... ؟
و اگر لينكي هست كه اينجور چيزا رو توضيح دادهه ممنون مي شم بذاريد...
بحثم كلي هست ، فرضا براي codevision يا ...
پيشاپيش ممنون از جواب هاتون ...
موفق باشيد.
يا علي.
اینو نیگا کن،صدرصد کمکت میکنه
کد:
Here are some examples of how to use htoi:
unsigned int nbr1, nbr2, nbr3;
char string1 [] = " 12ab ";
char string2 [] = "\t\t 7Fxx";
char string3 [] = "Aa55Bb66 1234";
----result----
nbr1 = htoi (string1); nbr1 is 0x12ab
nbr2 = htoi (string2); nbr2 is 0x7f
nbr3 = htoi (string3); nbr3 is 0xbb66 (0xaa55bb66 on 32-bit systems)
nbr3 = htoi (&string3[8]); nbr3 is 0x1234
*****************************************************************************/
unsigned int htoi (const char *ptr)
{
unsigned int value = 0;
char ch = *ptr;
/*--------------------------------------------------------------------------*/
while (ch == ' ' || ch == '\t')
ch = *(++ptr);
for (;;) {
if (ch >= '0' && ch <= '9')
value = (value << 4) + (ch - '0');
else if (ch >= 'A' && ch <= 'F')
value = (value << 4) + (ch - 'A' + 10);
else if (ch >= 'a' && ch <= 'f')
value = (value << 4) + (ch - 'a' + 10);
else
return value;
ch = *(++ptr);
}
}
ممنون ...
خيلي جالبه ... !
يه خوردهه اي توي دركش مشكل دارم ، اگر كمك كنيد ممنون مي شم.
اين تابع يه رشته رو مي گيرهه و در آرگمان ورودي بهش يه pointer اختصاص مي دهه ، كه بتونه با رشته كار كنه .
متغيير value رو با مقدار اوليه ي 0 تعريف مي كنه و مقدار pointer رو در متغيير ch كه از نوع char هست قرار مي دهه .
حالا مشكلات از اينجا شروع مي شه !! ( اين تابع يه بار كه تا آخر رفت مقدار رو بر مي گردونه ديگه ، اما با توجه به حلقه بينهايتي كه گذاشته ، بنظر مي رسه چند بار مقدار برمي گردونه ، كه كمي عجيبه و اينكه چطوري از حلقه بينهايته در مي ياد ؟!!
کد:
while (ch == ' ' || ch == '\t')
ch = *(++ptr);
اينجا ،فضا هاي خالي رو در واقع دارهه حذف مي كنه ... ( اما نمي دونم چطور فضاي خالي مابين حروف رو حذف مي كنه ؟!! )
اين حلقه ي بينهايت يعني چي ؟!
وقتي خط برنامه به return رسيد مگر همه چيز نبايد تمام بشه ؟!
خط هاي بعدي هم با شروطي كه گذاشته به يه سري مقاديري مي رسه كه مي ريزهه تو value .
حالا 4 بار شيفت به چپ چكار مي كنه ؟ ( *16)
اين كارا روي كاراكتر ها جواب مي دهه ؟ يعني چي ؟
آخرهه سر اين كاراكتر ها چطور به مقدار عددي در Value اعمال مي شن ؟
بعد از return اي كه اين نوشته ، يعني برگشتي هست ، كه دوبارهه مقدار pointer رو اضاف مي كنه و مي ريزهه تو ch و دوبارهه ادامه ي ماجرا ...
اما فضاي خالي مابين رو هم نفهميدم چطور پاك مي كنه ؟!!
پس كجاش رو فهميدم ؟!
اگر كسي مي تونه در درك كردنش بهم يه help اي برسونه ،ممنون مي شم ...
موفق باشيد.
يا علي.