为什么这个案例中decimal打印出来会比原来的数多零
时间: 2024-04-17 07:25:45 浏览: 17
在示例代码中,我们使用了`printf`函数来打印转换后的十进制数,但是在打印之前,我们没有指定打印的格式。默认情况下,`printf`函数会将整数以十进制形式打印。
如果你在使用`printf`函数时没有指定格式控制符,那么将以默认格式打印变量。在这种情况下,如果你的变量是一个整数类型(如`uint8_t`),`printf`函数会将其默认为整型(`int`)并以十进制形式打印。
为了解决这个问题,你可以使用合适的格式控制符来指定打印的格式。例如,你可以使用`%d`来打印有符号的十进制整数,或者使用`%u`来打印无符号的十进制整数。
以下是修改后的示例代码,将使用`%u`格式控制符来打印无符号的十进制数:
```c
#include <stdio.h>
#include <stdlib.h>
#include "stm32f4xx.h"
// USART 初始化函数
void USART_Init(void) {
// 配置 USART1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
// 将十六进制字符转换为十进制数
uint8_t hexToDec(uint8_t hex) {
if (hex >= '0' && hex <= '9') {
return hex - '0';
} else if (hex >= 'A' && hex <= 'F') {
return hex - 'A' + 10;
} else if (hex >= 'a' && hex <= 'f') {
return hex - 'a' + 10;
} else {
return 0; // 错误的输入
}
}
int main(void) {
// 初始化 USART
USART_Init();
while (1) {
// 检查接收缓冲区是否有数据
if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET) {
// 读取接收到的数据
uint8_t receivedData = USART_ReceiveData(USART1);
// 将十六进制字符转换为十进制数
uint8_t decimal = hexToDec(receivedData);
// 打印转换后的十进制数
printf("Received decimal: %u\r\n", decimal);
// 处理完数据后,可以根据需要执行其他操作
}
}
}
```
在上述示例代码中,我们使用`%u`格式控制符来打印无符号的十进制数。这将确保打印结果中不会有多余的零。
希望这可以解决你的问题!