(原創) 如何將16進位的ACSII值轉成相對應的字元? (C/C++) (C)
Abstract
若字串記載的是16進位的數值,該如何轉成相對應的ASCII值呢?
Introduction
若文字檔內記載的是16進位的數值,我們希望讀進字串後,轉成相對應的ASCII值。
C語言 / strtol.c
1 /*
2 (C) OOMusou 2007 http://oomusou.cnblogs.com
3
4 Filename : strtol.c
5 Compiler : Visual C++ 8.0
6 Description : Demo how to convert 16bit string to ACSII
7 Release : 02/06/2008 1.0
8 */
9
10 #include <stdio.h>
11 #include <stdlib.h>
12
13 int main() {
14 char *s = "51", *ends;
15 char c = (char)strtol(s, &ends, 16);
16 printf("%c\n", c);
17 }
2 (C) OOMusou 2007 http://oomusou.cnblogs.com
3
4 Filename : strtol.c
5 Compiler : Visual C++ 8.0
6 Description : Demo how to convert 16bit string to ACSII
7 Release : 02/06/2008 1.0
8 */
9
10 #include <stdio.h>
11 #include <stdlib.h>
12
13 int main() {
14 char *s = "51", *ends;
15 char c = (char)strtol(s, &ends, 16);
16 printf("%c\n", c);
17 }
執行結果
Q
51為Q的16進位表示法,使用strtol()這個定義在stdlib.h的函數,將char *轉成long int,然後再轉成char,即為所對應的ASCII字元。
strtol()第一個參數傳的是欲轉換的字串,第二個參數必須是個指標,若轉換過程有誤,會透過第二個參數傳出錯誤指標,由於strtol()要改變的就是指標位址,而不是指標所指的值,所以要將指標的位址傳進去,也就是指標的指標,所以傳入&ends。