سؤال

هل هناك محدد تنسيق لـ 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top