最近用单片机做个案子
其中想着把内存中的数据发到电脑的串口调试软件上来,看看数据对不对
比如单片机中的一个数据
uint8_t / Byte / Char 单字节
uint16_t / intger 双字节
uint32 4字节
我想把它 通过串口 发送到串口调试软件上来
于是写下了 下面的转换函数
1 uint8_t uInt_HexToStr(void * pDest,void * pSrc,uint8_t Bytes_Of_Src) 2 { 3 uint8_t aHex[4]; 4 uint8_t Tmp; 5 uint8_t *pDest2; 6 uint8_t *pSrc2; 7 8 if ((Bytes_Of_Src==1) || (Bytes_Of_Src==2) ||(Bytes_Of_Src==4)) 9 { 10 pDest2 = pDest; 11 pSrc2 = pSrc; 12 13 if (Bytes_Of_Src==1) 14 { 15 aHex[0] = *pSrc2; 16 } 17 18 if (Bytes_Of_Src==2) 19 { 20 aHex[0] = *(pSrc2+1); 21 aHex[1] = *pSrc2; 22 } 23 24 if (Bytes_Of_Src==4) 25 { 26 aHex[0] = *(pSrc2+3); 27 aHex[1] = *(pSrc2+2); 28 aHex[2] = *(pSrc2+1); 29 aHex[3] = *pSrc2; 30 } 31 32 Tmp = (aHex[0]&0xf0)>>4; 33 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 34 *pDest2=Tmp; 35 36 Tmp = (aHex[0]&0x0f); 37 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 38 39 *(pDest2+1)=Tmp; 40 41 42 if (Bytes_Of_Src>=2) 43 { 44 Tmp = (aHex[1]&0xf0)>>4; 45 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 46 *(pDest2+2)=Tmp; 47 48 Tmp = (aHex[1]&0x0f); 49 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 50 *(pDest2+3)=Tmp; 51 } 52 //---------------------------------------------- 53 if (Bytes_Of_Src>=4) 54 { 55 Tmp = (aHex[2]&0xf0)>>4; 56 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 57 *(pDest2+4)=Tmp; 58 59 Tmp = (aHex[2]&0x0f); 60 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 61 62 *(pDest2+5)=Tmp; 63 64 Tmp = (aHex[3]&0xf0)>>4; 65 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 66 *(pDest2+6)=Tmp; 67 68 Tmp = (aHex[3]&0x0f); 69 (Tmp<10) ? (Tmp=Tmp+0x30) : (Tmp=Tmp+0x37); 70 *(pDest2+7)=Tmp; 71 } 72 73 Tmp=1; // 执行完毕 74 } 75 else 76 { 77 Tmp=0; // 源数据字节长度不符合要求,只能是2或者4 字节 78 } 79 80 return Tmp; //返回执行结果:1-正常,0-异常 81 82 }
以上代码 可以转换单字节 双字节 4字节 ,这个里面还要注意 数据大小端的问题,大家要特别注意一下,不同的单片机或者编译器 都有可能会有 双字节或者 4字节 大小端问题
uint8_t Bytes_Of_Src 可以赋值 1 / 2 / 4 代表不同的源数据字节数
下面是调用函数的例子
void uUSART_Test(void) { /* 局部变量定义 */ char src[50], dest[50]; uint32_t aaa=0x1234ABCD; //举例要把这个数据发到电脑上查看 uInt_HexToStr(dest,&aaa,4); // 要转换的数据是4个字节的,转换结果放在dest里面 uUART_PutStr_Len(USART1,(uint8_t * )dest,8); //发送到电脑上的调试窗口 显示 1234ABCD uUART_PutStr(USART1," "); }
显示结果
谢谢大家 留言评论