문제

내가하고 싶은 일 :결과 16 비트 번호 (두 8 비트 #s를 결합한 후)를 직렬 보내기 기능과 함께 사용할 문자열로 바꾸십시오.

문제 :ITOA를 사용할 때, 결과는 절반 지점 (15 비트에서 16 번째로 통과)을 통과하면 결과가 음수가되므로 본질적으로 16 번째 비트를 부호 비트 (부호없는)로 사용하는 것이 서명되지 않은 것으로 간주됩니다. Sprintf 도이 작업을 수행합니다. ITOA (16)는 완벽하게 작동합니다.

하드웨어 :ATMEGA16 마이크로 프로세서 (AVR C) 16 비트 외부 ADC SPI 버스를 통해 연결 (ADC 결과를 2 개의 8 비트 번호로 보냅니다)

코드:

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);

그 결과 원래 UINT16 대신 15 비트 서명을 인쇄 한 것입니다. 나는 10 비트 내부 ADC의 결과를 인쇄하기 위해 ITOA를 사용해 왔지만,이 단순한 것이 나에게 그렇게 오랜 시간이 걸린다는 것이 나를 죽이고 있습니다.

당신의 시간에 정말 감사합니다.

도움이 되었습니까?

해결책

Sprintf가있는 경우

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

또는 int가 16 비트 인 경우

sprintf(outString, "%u", ADC_result);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top