سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.
اطلاعیه
Collapse
No announcement yet.
تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی
Collapse
X
-
پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی
نوشته اصلی توسط amir6682سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.
اگه با زبان c کار میکنید از این تابع استفاده کنید.
این رو برای lcd کاراکتری نوشتم که w عدد ورودی و آرایه مورد نظر هم t.
اگه متوجه نحوه کار تابع نشدید بگید تا تشریحش کنیم.
کد:void lcd_put(int w){ unsigned char t[17],b; int a,c; a=w;b=0; while(a>9){a=a/10;b++;} c=1; for(a=0;a<b;a++){c=c*10;} for(a=0;a<18;a++){t[a]='\0';} a=0; while(c!=0){ t[a]=(w/c)+0x30; w=w%c; c=c/10; a++;} lcd_puts(t);}
تولید کننده انواع تابلو فرمان آسانسور با تکنولوژی روز دنیا
-
پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی
نوشته اصلی توسط amir6682سلام.من میخوام یه تابع برای تبدیل عدد چند رقمی به کاراکتر بنویسم.مثلا به ازای عدد 875 مقدار کاراکتری اون رو بر گردونه.میشه روش تبدیل رو توضیح بدین.
1- شما باید در هر مرحله با تقسیم عدد مورد نظر بر 10 باقی مانده اون محاسبه کنید
2- به باقی مانده عدد 48 اضافه کنی تا تبدیل به کد اسکی بشه
3- اگه خارج قسمت از 10 کوچکتر بود تمام
در غیر این صورت خارج قسمت به عنوان ورودی جدید در نظر میگیری و به مرحله 1 بر میگردی
نکته: در مرحله 2 میتونی کارکترها در یک آرایه ذخیره کنی تا یک رشته در بیاد
نکته: بسیاری از کامپایلر ها کتابخانه ای برای تبدیل عدد به رشته و برعکس دارند[glow=red,2,300]تاپیک های ایجاد شده[/glow]- [li]گام به گام تا طراحی سیستم دیجیتالی[/li]
دیدگاه
-
پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر ب
مرسی دوست عزیز.مشکل من این بود که در mikroc دستور bytetostr متغیر مورد نظر رو به رشته تبدیل میکنه اما نمی تونه چینش صحیحی از آرایه ها رو داشته باشه.به همین خاطر خواستم خودم تابعی تعریف کنم.
my problem is :ببخشین قبلا اینو توی یه فروم انگلیسی نوشته بودم حال نداشتم فارسیش کنم.
////////16F887////////
char Achar[4],Bchar[4];
int num=0,cmp=0;
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;
void main ()
{
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Achar[0]='7';
Achar[1]='5';
Lcd_out(1,1,Achar);
num=75;
bytetostr(num,Bchar);
Lcd_chr(2,1,Bchar[0]); //bchar[0]=empty It doesn't start form here and start from bchar[1] for fill array??
Lcd_chr(2,2,Bchar[1]); //bchar[1]=7
Lcd_chr(2,3,Bchar[2]); //bchar[2]=5
Lcd_chr(2,4,Bchar[3]); //bchar[3]=empty
cmp=strcmp(Bchar,Achar);
if(cmp=0) //never been zero because in terms of strcmp they have difference
RB0_bit=1;
}
for example when num= 75 , i want to convert value of num Accordance with the following:
num= 75 ===> Bchar[0]=7 Bchar=[1]=5 Bchar[2]=empty Bchar[3]=empty
Instead of:
num= 75 === bytetostr(num,x)==> Bchar=[0]=empty Bchar[1]=7 Bchar[2]=5 Bchar[3]=empty
when use bytetostr it does not fill the leftmost part of array (x[0]) from the first.Achar and Bchar are 75 but in terms of strcmp they have difference
دیدگاه
-
پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی
من همین امروز نوشتم برای با Keil و ARM-gcc کار میکنه
سعی کردم بهینه باشه ، از دوستان کسی باز هم پیشنهاد داشت بگه
برای کامپایلر دیگه فقط باید "uint16_t" و "uint32_t" را عوض کنی مثلا بزاری int
کد PHP:void itoa(int num, char str[]) {
//this function convert integer to string - str[] must have enough space
int len = 0;
int num_tmp;
num_tmp = num;
//for negative number
if (num_tmp < 0) {
num_tmp = -num_tmp;
str[0] = '-';
len++;
}
//Find length of int Number
do {
len++;
num_tmp /= 10;
} while (num_tmp);
//return absolute number
if (num > 0)
num_tmp = num;
else
num_tmp = -num;
//store to string
str[len] = 0;
do {
len--;
str[len] = num_tmp % 10 + '0';
num_tmp /= 10;
} while (num_tmp);
}
{ خلاف قوانین - پاک شد }
دیدگاه
-
پاسخ : تبدیل عدد چند رقمی به کاراکتر متناظر بدون استفاده از توابع داخلی
نوشته اصلی توسط amir6682مرسی دوست عزیز.مشکل من این بود که در mikroc دستور bytetostr متغیر مورد نظر رو به رشته تبدیل میکنه اما نمی تونه چینش صحیحی از آرایه ها رو داشته باشه.به همین خاطر خواستم خودم تابعی تعریف کنم.
my problem is :ببخشین قبلا اینو توی یه فروم انگلیسی نوشته بودم حال نداشتم فارسیش کنم.
////////16F887////////
char Achar[4],Bchar[4];
int num=0,cmp=0;
sbit LCD_RS at RC0_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D4 at RC2_bit;
sbit LCD_D5 at RC3_bit;
sbit LCD_D6 at RC4_bit;
sbit LCD_D7 at RC5_bit;
sbit LCD_RS_Direction at TRISC0_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC4_bit;
sbit LCD_D7_Direction at TRISC5_bit;
void main ()
{
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Achar[0]='7';
Achar[1]='5';
Lcd_out(1,1,Achar);
num=75;
bytetostr(num,Bchar);
Lcd_chr(2,1,Bchar[0]); //bchar[0]=empty It doesn't start form here and start from bchar[1] for fill array??
Lcd_chr(2,2,Bchar[1]); //bchar[1]=7
Lcd_chr(2,3,Bchar[2]); //bchar[2]=5
Lcd_chr(2,4,Bchar[3]); //bchar[3]=empty
cmp=strcmp(Bchar,Achar);
if(cmp=0) //never been zero because in terms of strcmp they have difference
RB0_bit=1;
}
for example when num= 75 , i want to convert value of num Accordance with the following:
num= 75 ===> Bchar[0]=7 Bchar=[1]=5 Bchar[2]=empty Bchar[3]=empty
Instead of:
num= 75 === bytetostr(num,x)==> Bchar=[0]=empty Bchar[1]=7 Bchar[2]=5 Bchar[3]=empty
when use bytetostr it does not fill the leftmost part of array (x[0]) from the first.Achar and Bchar are 75 but in terms of strcmp they have difference
همیشه باید آخر باید 0 باشه تا پایان رشته مشخص کنه
با توجه با اینکه متغییر شما 2 بایتی هست و حداکثر مثدار 65535 میتونه داشته باشه شما باید متغییر Bchar بصورت زیر تعریف کنی
کد:Char Bchar[6] = "";
[glow=red,2,300]تاپیک های ایجاد شده[/glow]- [li]گام به گام تا طراحی سیستم دیجیتالی[/li]
دیدگاه
دیدگاه