把ASCII码的字符串转为数字的16进制
/*
函數(shù)名稱:AsciiStrToHexArray
功能:把ASCII碼的字符串轉(zhuǎn)為數(shù)字的16進制
參數(shù)dst:存儲16進制數(shù)組數(shù)據(jù)指針
參數(shù)src:存儲ASCII碼的字符串指針
返回值:16進制的數(shù)組數(shù)據(jù)長度
*/
int16_t AsciiStrToHexArray(uint8_t*dst,uint8_t*src)
{
? ?uint8_t ch;
? ?uint16_t index=0;
? ? if(strlen(src) == NULL)
? ? {
? ? ? ?return -1;
? ? }
? ? if(strlen(src)%2 == 0)//ASCII字符串偶數(shù)長度
? ? {
? ? ? ?for(index = 0;index < strlen(src);index++)
? ? ? ?{
? ? ? ? ? ?if((src[index]>='0')&&(src[index]<='9'))//數(shù)字0-9范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x30;
? ? ? ? ? ?}
? ? ? ? ? ?else if((src[index]>='A')&&(src[index]<='F'))//大寫字母A-F范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x37;
? ? ? ? ? ?}
? ? ? ? ? ?else if((src[index]>='a')&&(src[index]<='f'))//小寫字母,a-f范圍
? ? ? ? ? ?{
? ? ? ? ? ? ? ch = src[index]-0x57;
? ? ? ? ? ?}else{
? ? ? ? ? ? ??return -1;
? ? ? ? ? }?
? ? ? ? ? ?if(index%2 != 0)//下標從0開始,取余數(shù)不為0則是偶數(shù)長度的數(shù)據(jù)
? ? ? ? ? ?{
? ? ? ? ? ? ? dst[index/2]=dst[index/2]|ch;
? ? ? ? ? ? }else{
? ? ? ? ? ? ? dst[index/2]=ch<<4;
? ? ? ? ? ? }
? ? ? ?}
? ? ? ?return (index / 2);//整除,把除數(shù)作為16進制數(shù)組長度返回
? ? }else{//ASCII字符串奇數(shù)長度
? ? ? ?for(index = 0;index < strlen(src);index++)
? ? ? ?{
? ? ? ? ? ? if((src[index]>='0')&&(src[index]<='9'))//數(shù)字0-9范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x30;
? ? ? ? ? ? }
? ? ? ? ? ? else if((src[index]>='A')&&(src[index]<='F'))//大寫字母A-F范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x37;
? ? ? ? ? ? }else if((src[index]>='a')&&(src[index]<='f'))//小寫字母,a-f范圍
? ? ? ? ? ? {
? ? ? ? ? ? ? ch = src[index]-0x57;
? ? ? ? ? ? }
? ? ? ? ? ? else{
? ? ? ? ? ? ??return -1;
? ? ? ? ? ? }?
? ? ? ? ? ? if((index+1) == strlen(src))//奇數(shù)時,最后單獨一個字符轉(zhuǎn)為16進制后存儲緩存
? ? ? ? ? ? {
? ? ? ? ? ? ? ?dst[index/2] = ch;
? ? ? ? ? ? }else{//不是最后一個字符
? ? ? ? ? ? ? ? if(index%2 != 0)//下標從0開始,取余數(shù)不為0則是偶數(shù)長度的數(shù)據(jù)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? dst[index/2]=dst[index/2]|ch;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? dst[index/2]=ch<<4;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ?}
? ? ? ?return (index / 2+1);//不整除,把除數(shù)加1作為16進制數(shù)組長度返回
? ? }
}
int main()
{
? ? uint8_t str[]="1234567890abcdef"; //12 34 ab cd 0e
? ? uint8_t data[100];
? ? int16_t len = 0;
? ? memset(data,0,sizeof(data));
? ? len = AsciiStrToHexArray(data,str);
? ? if(len != -1)
? ? {
? ? ? ? for(uint8_t i = 0;i < len;i++)
? ? ? ? {
? ? ? ? ? ? printf("%0.2x ",data[i]);
? ? ? ? }
? ? }
? ? return 0;
}
程序運行結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的把ASCII码的字符串转为数字的16进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#上位机软件串口数据接收用Invoke
- 下一篇: 开通博客,希望同各位大佬一起学习