我想做的是:
将生成的16位数字(在组合两个8位数字后)转换为字符串,以便与串行发送函数一起使用
问题是:
当使用itoa时,当它通过中间点(从第15位传递到第16位)时,结果将变为负值,因此它基本上是使用第16位作为符号位(这并不奇怪),我的数字应该是无符号的。sprintf也这样做。请注意,itoa(16)应该是完美的。
硬件:
atmega16微处理器(AVR c)
通过SPI总线连接的16位外部ADC(将ADC结果作为两个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);

其结果是它打印一个15位有符号,而不是原始的uint16。我一直在用itoa打印10位内部ADC的结果,但这么简单的事情花了我这么长时间,真让我受不了。
我真的很感谢你的时间。

最佳答案

如果你有sprintf

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

或者,如果你的整数是16位
sprintf(outString, "%u", ADC_result);

08-15 22:38