一種輸入16進位制字串,轉化成整數的演算法
阿新 • • 發佈:2018-12-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),都可以。