الرئيسية > برمجة > الفرق بين char و unsigned char في لغة C

الفرق بين char و unsigned char في لغة C


السلام عليكم و رحمة الله
صادفت في قرائتي لهذه الشفرة التعليق التالي:

/*
 * Encrypt *len bytes of data
 * All data going in & out is considered binary (unsigned char[])
 */

المعنى من هذا التعليق هو أن البيانات ستكون من نوع ثنائي، أي شيء كملف صورة أو شيء آخر. فظننت أن unsigned char تستعمل في تمثيل البيانات الثنائية، قمت بعمل بحث في الإنترنيت فوجدت الآتي:

“There’s no dedicated “character type” in C language. char is an integer type, same (in that regard) as int, short and other integer types. char just happens to be the smallest integer type. So, just like any other integer type, it can be signed or unsigned.
It is true that (as the name suggests) char is mostly intended to be used to represent characters. But characters in C are represented by their integer “codes”, so there’s nothing unusual in the fact that an integer type char is used to serve that purpose.”

خلاصة القول أنه لا يوجد نوع بيانات خاص يمثل الحروف كما كنا نعتقد في C، بل إن النوع char هو في الأصل نوع ينتمي للأعداد الصحيحة. و الحروف في لغة C تمثل بأرقام ASCI و النوع char صادف أنه أصغر نوع من ناحية الحجم في الذاكرة.
تعليق آخر:

“ You should use unsigned char. The C99 standard says that unsigned char is the only type guaranteed to be dense (no padding bits), and also defines that you may copy any object (except bitfields) exactly by copying it into an unsigned char array, which is the object representation in bytes.
The sensible interepretation of this is to me, that if you use a pointer to access an object as bytes, you should use unsigned char.”

قبل أن نشرح التعليق علينا أولا أن نتذكر كيف يتم تمثيل البيانات في المتغيرات، لنفرض أنه لدينا متغير من نوع int ذو حجم 4 بايت أي 4 * 8 بت:

int num = 457;

المتغير num سيكون كالآتي في الذاكرة:

00000000 00000000 00000000 00000000 

أما تمثيل الرقم 457 سيكون كالآتي:

 00000000 00000000 00000001 11001001

أحيانا يتم عمل padding أو ما يعرف ب “ملئ الباقي” أي أنه البايتات الباقية يتم إضافة لها 0، أكيد في حالة الأرقام هذا لا يضر لأن الصفر من جهة اليسار يلغى كمثالنا السابق لكن في حالة البيانات الثنائية و خاصة إن كنا سنكتب في ملف فإن هذا سيشكل فرق، هنا نرجع إلى ترجمة التعليق السابق الذي يقول فيه أن لغة C تضمن لك أنه لن يتم تطبيق أي padding أو ملئ البايتات الباقية في حالة متغير من نوع unsigned char.

التصنيفات :برمجة الوسوم:
  1. 10 فبراير 2014 الساعة 7:35 م
  2. 23 مارس 2014 الساعة 10:14 ص

    لانوا راحتك بتهمنا طلبك فالبال عنا🙂

    وصف الموقع:
    فالبال هو موقع الكتروني متخصص في نشر الإعلانات مجاناً، و يغطي بخدماته جميع الدول العربية
    رابط الموقع:
    http://www.filbal.com
    سيارات, جوالات, وظائف, عربيات, عقارات, مستخدم, مستعمل, إعلان, شقق, موبايلات

  1. No trackbacks yet.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: