1. 程式人生 > 其它 >初出茅廬的小李第56篇部落格之(0-f)字串轉十六進位制數

初出茅廬的小李第56篇部落格之(0-f)字串轉十六進位制數

技術標籤:筆記字串十六進位制c語言

為什麼要這麼做?

有的時候我們會獲取一個編號這個編號是一串字串但是它僅有0123456789abcdefABCDEF這些十六進位制的陣列成,我們需要把字串的數字變成真正的數字儲存起來方便我們使用。
其實就是

char Str[]="0123456789ABcDeF";
把上面的字串變成{0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}
char Addr[8]={0};

其實我們發現0123456789這些字串的ascii碼和0123456789這些數字的ascii碼有一定的關係這個我們。
但是大寫的字母和小寫的字母雖然碼值不一樣但是當他們表示十六進位制數時就代表一樣的

所以我考慮使用庫函式把小寫的字母先轉成大寫字母再來轉16進位制,其實大小寫字母應是可以互相轉化的我這裡直接使用了庫函式不要問我為啥為啥不加個32或者減去32來處理,就是為了用這個庫函式啊。。。。

	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"