PDA

View Full Version : آموزش: چگونگی استفاده از این نوع داده به عنوان ورودی !!!



franchesco
دوشنبه 22 شهریور 1389, 09:07 صبح
من برنامه دارم برای یک میکرو کنترولر مینویسم ! مشکلی که دارم اینه که مقادیری که میگیرم به صورت هگز هست و بعد از اینکه داخل یک متغییر INT قرار میدم و بعد میخوام استفاده کنم میبینم مقدار عوض شده

برای مثال



#include <stdio.h>
#include <stdlib.h>


int main(void) {
int var = 0x10;
printf("%d\n",var);

}


مقدار ورودی 0x10 ولی وقتی برنامه رو ران میکنم خروجی 16 !
من همین مشکل رو در برنامه خودم دارم !

r00tkit
دوشنبه 22 شهریور 1389, 09:25 صبح
printf("%#x\n",var);
اینم بخونید برای بقیهی حالات printf (http://www.cplusplus.com/reference/clibrary/cstdio/printf/)

franchesco
دوشنبه 22 شهریور 1389, 10:20 صبح
printf("%#x\n",var);
اینم بخونید برای بقیهی حالات printf (http://www.cplusplus.com/reference/clibrary/cstdio/printf/)

با تشکر دوست عزیز

اما فکر کنم متنی که من نوشتم درست نخوندین ! من برای استفاده از این نوع دادن هگز مشکل دارم ! نه برای چاپ کردنش .

من وقتی یک مقدار هگز رو توی یک INT میریزم بعد که میخوام دوباره از همون مقدار استفاده کنم مقدار به چیز دیگه ای تغییر کرده !

مثل int var = 0x10;

ولی بعد که میخوام ازش استفاده کنم 16

Saeed_m_Farid
دوشنبه 22 شهریور 1389, 10:55 صبح
مثل int var = 0x10;
ولی بعد که میخوام ازش استفاده کنم 16
0x10 هگز معادل 16 دهدهی است، شما برداشت اشتباهی از هگز دارید.
عدد صحیح 10 در مبنای 16 میشه 0xA

franchesco
دوشنبه 22 شهریور 1389, 11:13 صبح
0x10 هگز معادل 16 دهدهی است، شما برداشت اشتباهی از هگز دارید.
عدد صحیح 10 در مبنای 16 میشه 0xA

بله دوست عزیز
خوب من الان باید چی کار کنم ؟

من یک مقدار مثل 0x10 رو به فرض میگیرم میخوام توی یک متغییر ذخیره کنم و بعد به فرض اگه


if(متغییر == 0xq0)

درست جواب بده

این تمام چیری که من لازم دارم !

Saeed_m_Farid
دوشنبه 22 شهریور 1389, 11:40 صبح
من که متوجه نشدم چی فرمودین، ولی اگه با اعداد هگز کار می کنید باید هگز هم عمل (فکر) کنید؛ مثلاً برای مقایسه باید با مقادیر هگز مقایسه کنید نه دسیمال :

int main(void)
{
int i = GeValueFormHardware(); // مقداری که از میکرو یا سخت افزار میخونید
if (i == 0x1A2B3C) // با مقدار موردنظر شما برابر هست یا نه؟ البته به هگز
{
cprintf("%x", i);
// Do somthing
}
else
// Do somthing else!
return 0;
}


اگه کار با اعداد هگز براتون سخت هست، باید به عدد صحیح تبدیلش کنید بعد مقایسه کنید؛ مثلاً تو مثال بالا بجای 0x1A2B3C باید 1715004 بنویسید.
امیدوارم درست فهمیده باشم منظورتون رو.

franchesco
دوشنبه 22 شهریور 1389, 12:00 عصر
ممنون دوست عزیز

GeValueFormHardware();

من با microC کار میکنم ... برنامه ای که من دارم مینویسیم برای PIC16f877A

من در هر حال باید از مقدار هگز استفاده کنم نه دسیمال ! چون بعد از اون دوباره به مقدار هگز نیاز دارم.

حالا من که با microC کار میکنم چطور میتونم این کار رو انجام بدم؟

سرچ کردم ولی چیزی ندیدم!