1

我想要做的: 将生成的 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 的结果,但是这么简单的事情要花这么长时间,这让我很生气。

我真的很感谢你的时间。

4

1 回答 1

3

如果你有 sprintf

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

或者,如果您的整数是 16 位

sprintf(outString, "%u", ADC_result);
于 2013-11-07T23:07:34.360 回答