محدد التنسيق للحرف السداسي في C
-
12-12-2019 - |
سؤال
هل هناك محدد تنسيق لـ sprintf
في C الذي يعين a char
للعرافة بنفس الطريقة %x
خرائط و int
إلى عرافة؟
المحلول
نعم و لا.
منذ sprintf
يأخذ قائمة وسائط متغيرة، وتخضع جميع الوسائط للترقية الافتراضية من قبل sprintf
يستقبلهم.هذا يعني sprintf
سوف أبداً استلام char
-- أ char
سيتم ترقيته دائمًا إلى int
قبل sprintf
يتلقاها (و short
سوف كذلك).
نعم منذ ماذا sprintf
سيتم الاستلام int
, ، يمكنك استخدام %x
لتحويلها إلى تنسيق سداسي عشري، وستعمل بنفس الطريقة سواء بدأت هذه القيمة كـ char
, short
, ، أو int
.إذا كنت تريد (كما هو الحال غالبًا) طباعة حرفين لكل إدخال، فيمكنك استخدام %2.2x
.
احذر من نقطة واحدة بالرغم من ذلك:إذا كان لديك char
تم التوقيع، وتبدأ بقيمة سلبية، ويتم الترقية إلى int
سوف تنتج نفس القيمة العددية، والتي عادة متعود يكون نفس نمط البت مثل الحرف الأصلي، لذلك (على سبيل المثال) حرف ذو قيمة -1
سيتم طباعة عادة كما ffff
لو int
هو 16 بت، ffffffff
إذا كان int هو 32 بت، أو ffffffffffffffff
لو int
هو 64 بت (بافتراض التمثيل التكميلي النموذجي للأعداد الصحيحة الموقعة).
نصائح أخرى
نفس الشيئ %x
.الجميع char
يتم تحويل القيم إلى int
قبل أن يتم تمريره إلى sprintf
(أو أي وظيفة أخرى تأخذ عددًا متغيرًا من المعلمات).
printf("%x\n", 'a');
مطبوعات 61