我想要做的: 将生成的 16 位数字(在组合两个 8 位 #s 之后)变成一个字符串,以与我的串行发送功能一起使用
问题: 使用 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 的结果,但是这么简单的事情要花这么长时间,这让我很生气。
我真的很感谢你的时间。