初出茅廬的小李第56篇部落格之(0-f)字串轉十六進位制數
阿新 • • 發佈:2021-01-06
為什麼要這麼做?
有的時候我們會獲取一個編號這個編號是一串字串但是它僅有0123456789abcdefABCDEF這些十六進位制的陣列成,我們需要把字串的數字變成真正的數字儲存起來方便我們使用。
其實就是
char Str[]="0123456789ABcDeF";
把上面的字串變成{0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}
char Addr[8]={0};
其實我們發現0123456789這些字串的ascii碼和0123456789這些數字的ascii碼有一定的關係這個我們。
但是大寫的字母和小寫的字母雖然碼值不一樣但是當他們表示十六進位制數時就代表一樣的
uint8_t i,n = 0;
while(str[i]!='\0')
{
str[i]=toupper(str[i]);
i++;
}
接下來的才是真正實現轉換的實現
for(i = 0; str[i]; i += 2)
{
if(str[i] >= 'A' && str[i] <= 'F')
{
addr[n] = str[i] - 'A' + 10;
}
else
{
addr[n] = str[i] - '0';
}
if(str[i + 1] >= 'A' && str[i + 1] <= 'F')
{
addr[n] = (addr[n] << 4) | (str[i + 1] - 'A' + 10);
}
else
{
addr[n] = (addr[n] << 4) | (str[i + 1] - '0');
}
n++;
}
printf("n = %d\r\n",n);
/*
不要問我原理,程式碼我也是抄別人的..................
*/
這裡是測試程式碼
char Str[]="0123456789ABcDeF";
char Addr[8]={0};
uint16_t j,m;
m = GetMeterAddr(Str,Addr);
for(j = 0;j < m;j++)
printf ("0x%02X ",Addr[j]);
printf("\n");
結果
對了
標頭檔案不能忘記寫
這個是用來轉大小寫的
#include "ctype.h"