سؤال

ما أريد أن أفعله:اقلب رقم 16 بت الناتج (بعد الجمع بين اثنين من 8bit #S) إلى سلسلة لاستخدامها مع وظيفة الإرسال التسلسلي الخاص بي

المشكلة:عند استخدام ITOA ، تصبح النتيجة سلبية بمجرد أن تمر نقطة منتصف الطريق (تمر من بتات 15 إلى 16) بحيث تستخدم بشكل أساسي البت السادس عشر باعتبارها بت الإشارة (غير مفاجئة) حيث من المفترض أن يكون رقمي غير موقّع. Sprintf أيضا يفعل هذا. لاحظ أن itoa (16) يعمل بشكل مثالي ، كما ينبغي.

الأجهزة:Atmega16 Micro Processor (AVR C) 16bit خارجي ADC متصل عبر ناقل SPI (يرسل نتيجة ADC كرقمين 8bit)

الرمز:

uint16_t ADC_result = ADC_data_LSB | (ADC_data_MSB<<8); // Combine both halves of the data
unsigned char *outString = "0123456789abcdef";
itoa(ADC_16_result, outString, 10);
send_A_String(outString);

نتيجة ذلك هي أنه يطبع 15 بت موقّع بدلاً من UINT16 الأصلي. لقد كنت أستخدم ITOA لطباعة نتائج ADC الداخلية 10bit ، لكن من المقتلني أن شيئًا بسيطًا يأخذني وقتًا طويلاً.

أنا حقا أقدر وقتك.

هل كانت مفيدة؟

المحلول

إذا كان لديك Sprintf

char outString[10];
sprintf(outString, "%hu", ADC_result);

أو ، إذا كانت ints 16 بت

sprintf(outString, "%u", ADC_result);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top