1. أهمية أنواع البيانات في لغة C
في لغة C، تؤثر أنواع البيانات بشكل كبير على دقة وكفاءة البرنامج. يُعتبر النوعان char
وint
من أكثر الأنواع الأساسية استخداماً، وغالبًا ما تظهر الحاجة إلى تحويلهما بين بعضهما البعض أثناء البرمجة. في هذه المقالة، سنشرح كيفية تحويل نوع char
إلى int
والعكس، مع ذكر النقاط التي يجب الانتباه إليها.
الاستخدامات الشائعة للتحويل
في البرامج، يفيد التحويل بين نوع char
وint
عند التعامل مع الأحرف وقيمها العددية المقابلة، أو عند الرغبة في توفير حجم الذاكرة. على سبيل المثال، يمكن تحويل كود ASCII الممثل بـchar
إلى int
لاستخدامه في العمليات الحسابية. كذلك عند إدخال قيمة كـchar
ومعالجتها كرقم، يصبح هذا التحويل ضرورياً.
2. تحويل نوع char إلى int
في لغة C، يمكن تحويل نوع char
إلى int
باستخدام الـcasting. بهذه الطريقة، يمكن التعامل مع قيمة char
كعدد صحيح.
طريقة التحويل الأساسية
لتحويل قيمة char
إلى int
، يُستخدم التحويل البسيط (casting):
#include <stdio.h>
int main() {
char character = 'A'; // كود ASCII للحرف 'A' هو 65
int intValue = (int)character; // تحويل char إلى int
printf("كود ASCII للحرف %c هو %d.\n", character, intValue);
return 0;
}
في هذا البرنامج، يتم تحويل الحرف 'A'
إلى عدد صحيح ويتم طباعة النتيجة، والتي ستكون 65
.
char موقع (signed) وchar غير موقع (unsigned)
في لغة C يوجد نوعان من char
: موقع (signed) وغير موقع (unsigned). الـchar
الموقع يمكن أن يحمل قيمًا سالبة، بينما الـchar
غير الموقع يحمل قيماً من 0 إلى 255. عند تحويل char
إلى int
يجب الانتباه لهذا الفرق. إليك مثالاً على التحويل:
#include <stdio.h>
int main() {
unsigned char uChar = 200; // char غير موقع
int intValue = (int)uChar;
printf("عند تحويل قيمة unsigned char %u إلى int تكون %d.\n", uChar, intValue);
return 0;
}
في هذا البرنامج، سيتم تحويل قيمة char
غير الموقع 200 إلى int
وستبقى النتيجة 200. أما مع الـchar
الموقع فقد تظهر نتائج مختلفة حسب الإشارة، ويجب التعامل مع ذلك حسب الحاجة.

3. تحويل int إلى char
عند تحويل نوع int
إلى char
، فإننا نقوم بتحويل قيمة int
إلى نوع char
الأصغر. يجب الانتباه لأن القيم الخارجة عن نطاق char
قد تؤدي إلى فقدان البيانات.
طريقة التحويل والتنبيهات
عند تحويل int
إلى char
، قد تحصل على نتائج غير متوقعة إذا كانت القيمة خارج نطاق char
:
#include <stdio.h>
int main() {
int number = 300; // قيمة خارج نطاق char
char character = (char)number; // فقدان بيانات متوقع
printf("عند تحويل العدد %d إلى char يكون الحرف '%c'.\n", number, character);
return 0;
}
في هذا المثال، عند تحويل 300
إلى char
سيتم فقدان البيانات وقد تظهر أحرف غير متوقعة. لذا يجب الانتباه إلى نطاق char
عند التحويل.
4. التحويل من السلسلة النصية إلى عدد صحيح
في لغة C، كثيرًا ما يتم تحويل النصوص إلى أعداد صحيحة، مثلاً عند استقبال مدخلات المستخدم وتحويلها إلى أرقام. في هذه الحالة، تُستخدم دوال مثل atoi
وstrtol
.
التحويل باستخدام دالة atoi
تُستخدم دالة atoi
لتحويل السلاسل النصية إلى أعداد صحيحة بسهولة، لكن من سلبياتها ضعف التعامل مع الأخطاء.
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
int number = atoi(str); // تحويل السلسلة إلى int
printf("عند تحويل النص %s إلى عدد صحيح تكون النتيجة %d.\n", str, number);
return 0;
}
في هذا البرنامج، سيتم تحويل النص "1234"
إلى العدد الصحيح 1234
، لكن الدالة لا تتعامل مع الأخطاء بشكل كافٍ.
التحويل الآمن باستخدام دالة strtol
تُعتبر دالة strtol
أكثر أمانًا حيث تتحقق من الأخطاء أثناء تحويل النص إلى عدد.
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234";
char *endptr;
long int number = strtol(str, &endptr, 10); // تحويل آمن
if (*endptr != '\0') {
printf("فشل التحويل.\n");
} else {
printf("عند تحويل النص %s إلى عدد صحيح تكون النتيجة %ld.\n", str, number);
}
return 0;
}
في هذا الكود، إذا فشل التحويل تظهر رسالة خطأ. بهذه الطريقة يمكنك التعامل مع الأرقام بشكل أكثر أماناً.
5. أمثلة تطبيقية باستخدام char وint
وأخيراً، دعنا نرى بعض الأمثلة التطبيقية التي تجمع بين char
وint
.
عمليات حسابية مختلطة بين char وint
البرنامج التالي ينفذ عملية حسابية تجمع بين نوع char
وint
لإنتاج حرف جديد باستخدام قيمة رقمية:
#include <stdio.h>
int main() {
char ch = 'a';
int num = 3;
char result = ch + num; // جمع قيمة ASCII للحرف مع الرقم
printf("عند جمع العدد %d إلى الحرف %c، يكون الناتج '%c'.\n", num, ch, result);
return 0;
}
في هذا البرنامج، يتم جمع العدد 3 إلى كود ASCII للحرف 'a'
فتكون النتيجة 'd'
. يُظهر هذا المثال سهولة إجراء العمليات المختلطة بين char
وint
في لغة C.