作者loveme00835 (最愛朴素妍)
看板C_and_CPP
標題Re: [問題] 進位轉換 與 ASCII問題
時間Mon Sep 27 13:33:12 2010
※ 引述《paulyanzi (消失)》之銘言:
: 1.
: 日前看過一個 16 進位轉 10 進位的方式
: 但是不太理解為什麼這樣可以
: 不知道有人可以幫忙解釋嗎?
: num = 16 * num + (*str) - '0';
: str++;
以字串 "345"(10進位)為例子, 以下用圖解說明, 一開始 num初始
值為
0 :
Round 1.
str
↓
'3' '4' '5' '\0'
num = 10 *
0 + (
'3'- '0'); // 這時 num == 3
str++; // 這時 str 指到字元 '4'
Round 2.
str
↓
'3'
'4' '5' '\0'
num = 10 *
3 + (
'4'- '0'); // 這時 num == 34
str++; // 這時 str 指到字元 '5'
Round 3.
str
↓
'3' '4'
'5' '\0'
num = 10 *
34 + (
'5'- '0'); // 這時 num == 345
str++; // 這時 str 指到字元 '\0'
如果你是天才, 當然頭腦裡想像就好; 如果不是, 把過程寫滿幾張
A4 紙來彌補吧...
: 最後每一個字元跑完 num 就是十進位的答案
: 十進位似乎也可以這樣算 但是不太懂原理
: 2.
: 如果 function(char *str) 傳入的是要轉換的字
如果你不會改到原字串的內容,( 把 "Apple"改成 "Orange"), 參數
的型態請用
char const *,雖然兩者操作上有時是一樣合法的, 但
在內行人來看是有不同的意義, 這樣會混淆別人的理解.
呼叫function的人為了怕你改到他的字串, 可能會寫出下面的程式
碼 :
char copy[ BUFFER_SIZE ];
strcpy( copy, src );
function( copy );
作了很多白功
: str 取得的是 4321
: 如果今天要取得第一個字元的數值是否有直接取得的方式?
: 而不用 (*str) - '0' 這樣用ASCII的方式去做?
: 謝謝
用映射的方式 :
int charToInteger[ 256 ];
for(
char c = '0'; c <= '9'; ++c )
charToInteger[ c ] = c - '0';
用巨集的方式 :
#define CHAR_TO_INTEGER( c )\
c - '0'
對 char 來說沒有直接取得的方法, 你所能做的就是讓他更有可讀
性, 很多人直接hard code : c - 48, 這種程式碼我通常都直接丟
掉...
--
███ ◢█◣ ██◣ ◢█◣
█ ▄▄ █▄█ █▄█ █▄█
█ █ █ █ ◣ █ █
█▄▄ ███ █ █ ███ █ █ ██ ▌
█▄▄ █ █ ▄█ █ █ █ █ █ █▌ T-ara板歡迎你加入
▄▄█ █▄█ ▊ █▅█ █▄█ █ █ ∮makigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
→ loveme00835:發完才發現上面有一篇了...Orz 09/27 13:34
※ 編輯: loveme00835 來自: 140.121.197.115 (09/27 14:01)
推 eglath:推 雖然我還是不知道在做啥-,- 09/27 15:11