Re: [問題] 進位轉換 與 ASCII問題

看板C_and_CPP作者 (最愛朴素妍)時間15年前 (2010/09/27 05:33), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

09/27 13:34, , 1F
發完才發現上面有一篇了...Orz
09/27 13:34, 1F
※ 編輯: loveme00835 來自: 140.121.197.115 (09/27 14:01)

09/27 15:11, , 2F
推 雖然我還是不知道在做啥-,-
09/27 15:11, 2F
文章代碼(AID): #1Ce2oTij (C_and_CPP)
文章代碼(AID): #1Ce2oTij (C_and_CPP)