View Full Version : تبدیل عدد به کد اسکی و برعکس
soodi1100
پنج شنبه 01 آبان 1393, 13:07 عصر
باسلام
من 4 تا عدد دارم
این اعداد از 0 تا 65535 هستند ، حالا من میخام این 4 تاعدد رو بازه تغییراتشون رو از 0 تا 65535 برسونم به از 0 تا 255 ، یعنی 0 بشه 0 و 65535 بشه 255 و حالا بتونم هر کدوم از این اعداد رو به یک کد اسکی تبدیل کنم و ارسال کنم و حدود 1 کیلومتر اونطرفتر ، این 4 تا کد اسکی رو دریافت کنم و به 4 تا عدد (همون اعداد بین 0 تا 255) تبدیل کنم
این کار رو برای این میخام انجام بدم تا سرعت انتقال اطلاعاتم بالا بره
ممنون میشوم که در مورد تغییر بازه عدد ها و در مورد تبدیل به کد اسکی و تبدیل از کد اسکی به عدد توضیح بدید
تشکر فراوان
negative60
پنج شنبه 01 آبان 1393, 15:59 عصر
برای تبديل اسکی به بايت تابعی لازم نيست ميتونيد اعداد 0 تا 255 رو مساوی با يک بايت قرار بديد
char S = 75;
هر بايت ميتونه نهايتاً 256 مقدار رو نگه داره پس بايد 2 بايت برای هر عدد اختصاص بديد (256 * 256) که ميشه 65536 که همون مقداری هست که لازم داريد پس 8 بايت لازم داريد که تو هر 2 بايت يک عدد قرار ميگيره.
در سمت گيرنده ميبايست بايت ها رو دوتا دوتا از هم جدا و تبديل به عدد کنيد
void NumberToChar(int intNumber, char *result)
{
if(intNumber > 65535) result;
int A = (intNumber / 256);
int B = (intNumber % 256);
char cN[] = {A,B};
memcpy(result, cN, 2);
}
int CharToNumber(const char *chNumber, int n)
{
int res;
int A = chNumber[n];
int B = chNumber[n+1];
if(B < 0) B += 256;
if(A < 0) A += 256;
res = (A * 256) + B;
return res;
}
int main()
{
char Buff[8];
NumberToChar(10, Buff+0);
NumberToChar(42536, Buff+2);
NumberToChar(8954, Buff+4);
NumberToChar(65535, Buff+6);
//yek kilometer onvartar
int num1 = CharToNumber(Buff, 0); //0 Or 2 Or 4 Or 6
int num2 = CharToNumber(Buff, 2);
int num3 = CharToNumber(Buff, 4);
int num4 = CharToNumber(Buff, 6);
}
soodi1100
دوشنبه 05 آبان 1393, 10:35 صبح
سلام
تشکر بسیار بسیار فراوان از توضیحات عالیتان
ولی یه مشکلی هست ، من 4 عدد اصلیم قبلا از 0 تا 65535 بود که توضیحات شما بسیار کار آمد شد ولی الان 4تا عددم از 0 تا 4096 هست که باید به از 0 تا 255 تبدیل بشه و بعد به اسکی تبدیل بشه و بعد 1 کیلومتر اونطرفتر دوباره از اسکی به 4 تا عدد از 0 تا 4096 تبدیل بشه
ممنون میشوم بازم راهنمایی کنید
تشکر فراوان
negative60
دوشنبه 05 آبان 1393, 11:34 صبح
الان 4تا عددم از 0 تا 4096 هست که باید به از 0 تا 255 تبدیل بشه و بعد به اسکی تبدیل بشه و بعد 1 کیلومتر اونطرفتر دوباره از اسکی به 4 تا عدد از 0 تا 4096 تبدیل بشه
تو اون مثال ماکسيمم 65535 هست، و برای هر عددی که کوچيکتر از اين مقدار باشه قابل استفاده هست!
اون مثال هم همين کار رو انجام ميده اعداد توسط تابع NumberToChar به بايت تبديل ميشن و تو آرايه Buff قرار ميگيرند حالا شما بايد اين آرايه رو بفرستيد به مقصد و اونجا با تابع CharToNumber تبديل به عدد کنيد
soodi1100
دوشنبه 05 آبان 1393, 13:13 عصر
سلام
تشکر فراوان
ولی کامپایلر ارورو های زیر رو به تابع میگیره :
فکر کنم اول تابع باید همه متغیر ها رو معرفی کنیم و بعد توی تابع ازشون استفاده کنیم ، این روشی که شما استفاده کردید (همزمان ساختید و مقدار دهی کردید) فکر کنم به همین ایراد میگیره اگر راهنمایی کنید تا حلش کنم ممنون میشوم
Program.c(18): warning: #174-D: expression has no effect
if(intNumber > 65535) result;
Program.c(19): error: #268: declaration may not appear after executable statement in block
int A = (intNumber / 256);
Program.c(20): error: #268: declaration may not appear after executable statement in block
int B = (intNumber % 256);
Program.c(23): error: #268: declaration may not appear after executable statement in block
char cN[] = {A,B};
Program.c(23): error: #28: expression must have a constant value
char cN[] = {A,B};
Program.c(23): error: #28: expression must have a constant value
char cN[] = {A,B};
soodi1100
دوشنبه 05 آبان 1393, 13:37 عصر
الان تابع رو به صورت زیر تغییر دادم
ولی بازم این ارور ها رو میگیره :
void NumberToChar(int intNumber, char *result)
{
int A,B;
if(intNumber > 65535) result;
A = (intNumber / 256);
B = (intNumber % 256);
char cN[]={A,B};
memcpy(result, cN, 2);
}
ارور ها :
Program.c(24): error: #268: declaration may not appear after executable statement in block
char cN[]={A,B};
Program.c(24): error: #28: expression must have a constant value
char cN[]={A,B};
Program.c(24): error: #28: expression must have a constant value
char cN[]={A,B};
negative60
دوشنبه 05 آبان 1393, 16:48 عصر
اون مثال با ++C هست يا اسم فايلتون رو به Program.cpp تغيير بديد يا قسمت هايی که خطا ميگيره رو طبق استاندارد C بنويسيد
char cN[1];
cN[0] = A;
cN[1] = B;
soodi1100
سه شنبه 25 آذر 1393, 12:54 عصر
سلام
تشکر
آقا من حالا میخام این Buff رو از طریق پورت سریال ارسال کنم روی کامپیوتر ، ولی پورت سریال 8 بیت ، 8 بیت باید ارسال بشه ، اینو چطوری ارسال کنم ؟؟؟
abblue2
دوشنبه 15 دی 1393, 17:54 عصر
سلام.یک سری به این سایت بزنید
http://skycurious.ir
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.