1. 程式人生 > >一種輸入16進位制字串,轉化成整數的演算法

一種輸入16進位制字串,轉化成整數的演算法

#include "stdio.h"
#include "stdlib.h"

int main() {
	char *s = malloc(100);
	int i;
	int data = 0;
	printf("input your hex string:");
	scanf("%s", s);
	for(i = 0; i < strlen(s); i++) {
		if(s[i] >= 'a') {
			s[i] -= ('a' - 'A');
		}
		data += ((s[i] >= '0' && s[i] < ('0' + 10)) ? s[i] - '0' : s[i] - 55)  << (4 * (strlen(s) - 1 - i));
	}
	printf("String Hex trams to really interger:%X\n", data);
	return 0;
}

一個師妹問的問題,如何輸入16進位制字串,轉化為int值。然後隨便寫了一下

 

如果是數字的ASCII值範圍,那麼就減去第一個數字的ASCII值也就是48
得到真數字
而如果是大寫字母,就減去大寫字母的第一個ASCII值(小寫字母就先轉化為大寫字母的序號先)
得到這個大寫字母對應的整數值
然後就是進位制轉換演算法,其中<<4等於乘以16(2的4次方等於16), << (4 * (strlen(s) - 1 - i))等效於pow(16, strlen(s) - 1 - i),都可以。