淘晶驰等串口屏通讯单片机ASCII数字转换为uint32数值

使用淘晶驰等串口屏通讯单片机时,使用ASCII编码格式输出到单片机后需要转换为无符号数字,制作了个函数用于实现。

int32_t parse_usart_w_data(const uint8_t *data_buf, uint16_t data_len, uint32_t *num)
{
    // 参数说明:
    // data_buf: 指向ASCII数字字符数组的指针
    // data_len: 数组的长度
    // num: 输出转换后的32位整数

    uint64_t temp_num = 0;  // 临时存储(防止32位溢出)

    // 检查输入参数的有效性
    if (data_buf == NULL || num == NULL || data_len == 0) {
        return -1;
    }

    // 遍历数字ASCII字符,转换为数值
    for (uint16_t i = 0; i < data_len; i++) {
        // 检查是否为数字ASCII(0-9)
        if (data_buf[i] < '0' || data_buf[i] > '9') {
            return -1;  // 包含非数字字符,解析失败
        }

        // 转换:当前值*10 + 新数字(ASCII转数字)
        temp_num = temp_num * 10 + (data_buf[i] - '0');

        // 检查是否超出32位无符号整数范围(0~0xFFFFFFFF)
        if (temp_num > 0xFFFFFFFFUL) {
            return -1;
        }
    }

    // 转换完成,赋值给输出参数
    *num = (uint32_t)temp_num;
    return 0;
}

parse_usart_w_data(const uint8_t *data_buf, uint16_t data_len, uint32_t *num),data_buf为串口收到的数据存储到数组中,data_len数据长度,num为转换后得到的结果。

使用示例,ascii_data1为模拟收到的串口数据,result转换后的结果输出:12345

// 示例1:直接使用ASCII字符数组
int main() {
    uint32_t result;
    const uint8_t ascii_data1[] = {'1', '2', '3', '4', '5'};
    
    if (parse_usart_w_data(ascii_data1, sizeof(ascii_data1), &result) == 0) {
        printf("转换结果: %u\n", result);  // 输出: 12345
    }
    
    return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值