接口返回buffer的16进制数据如何转换

我们请求接口数据经常会看到buffer数据,这是我们可以使用data.toString()就可以啦~

转载于:https://www.cnblogs.com/kaiqinzhang/p/10805594.html

### STM32 串口接收16进制数据转换为十进制 为了实现STM32通过串口接收到的16进制数据转换为十进制数值,可以遵循如下方法: #### 初始化USART接口 确保已初始化USART,并配置好相应的参数以便能够正常收发数据。这通常涉及到设置波特率、字长、停止位以及校验方式等。 ```c void USART_Init(void){ // 配置GPIO端口模式, 上拉输入/推挽输出... // RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // GPIO_Init(GPIOA, &GPIO_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_Mode_Tx; // USART_Init(USART1, &USART_InitStructure); } ``` #### 编写转换函数 创建一个专门用来把十六进制数组里的单个元素转化为十进制整型值的辅助函数。此过程可能涉及到了解ASCII编码表来区分字符'0'- '9', 'a'-'f','A'-'F'[^(2)]. ```c int HexCharToInt(char ch) { if (ch >= '0' && ch <= '9') return ch - '0'; if (ch >= 'a' && ch <= 'f') return ch - 'a' + 10; if (ch >= 'A' && ch <= 'F') return ch - 'A' + 10; return -1; // 错误情况处理 } ``` 对于多字节的数据包,则需逐一对各字节执行上述操作再组合起来形成最终的结果: ```c uint32_t HexStringToDecimal(const char *hexStr,uint8_t length){ uint32_t result=0; while(length--){ int value = HexCharToInt(*hexStr++); if(value<0 || value>15)return 0xFFFFFFFF;//非法输入返回错误码 result=(result<<4)|value; } return result; } ``` #### 数据接收与处理逻辑 当有新数据到达时触发中断服务程序ISR,在其中调用之前定义好的转换功能完成由Hex至Dec的变化;之后利用`printf()`或其他形式向终端反馈计算后的结果[^3]. ```c void USART_IRQHandler(void){ if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ static char buffer[BUF_SIZE]; static uint8_t index = 0; buffer[index++] = USART_ReceiveData(USART1); if(index>=4){// 假定每次接收四个字符作为一个完整的16进制数表示 uint32_t decimalValue = HexStringToDecimal(buffer,index); sprintf((char*)buffer,"%lu\r\n",decimalValue);// 将其转成字符串准备发送出去 for(uint8_t i=0;i<strlen((const char *)buffer);i++) USART_SendData(USART1,buffer[i]); index=0; // 清除索引等待下次读取新的四位序列 } } } ``` 以上代码片段展示了如何在STM32上实现从串口接收到的一组连续的16进制字符流被解释成为对应的十进制数字的过程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值