[問題] 16進和10進轉換程式(8051)

看板C_and_CPP作者 (小D(滴))時間14年前 (2010/08/25 10:35), 編輯推噓3(3010)
留言13則, 8人參與, 最新討論串1/1
0x01 = 1 0x09 = 9 0x0A = 10 0x0F = 15 0x15 = 21 0x20 = 32 ================================================== 請問我該如何把左邊的16進制變成右邊10進制的2位數呢?? 如0x20 我要變成兩個byte byte[1]=3 byte[0]=2 0x15 我要變成兩個byte byte[1]=2 byte[0]=1 不知道在C我該如何把接收到的16進換算兩個位數的10進制 懇請大家指教~先謝謝大家 ========================================================== 我把兩個10進位的數字換算成一個16進制 如下所示~但不知道什麼寫法換算回來比較好 Byte i; data=byte[1]; data(data<<4); data|=byte[0]; for(i=0x00;i<byte[1];i++) { data-=0x06; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.43.81

08/25 18:38, , 1F
sscanf、sprintf
08/25 18:38, 1F

08/25 18:47, , 2F
sscanf("0x%02X", &h); -> sprintf(s, "%d", h);
08/25 18:47, 2F

08/25 18:47, , 3F
或者也可以自己算,取"0x"後面兩位自己算.
08/25 18:47, 3F
※ 編輯: fmdjyl 來自: 219.85.43.81 (08/25 18:58)

08/25 19:46, , 4F
strtoul()
08/25 19:46, 4F

08/25 20:12, , 5F
不管你外面輸入進去的是幾進制,電腦內部存的都是二進制。
08/25 20:12, 5F

08/25 21:24, , 6F
好像都有現成的function可以呼叫
08/25 21:24, 6F
※ 編輯: fmdjyl 來自: 122.116.80.6 (08/25 23:26)

08/25 23:27, , 7F
不好意思 忘記說是8051...用C語言
08/25 23:27, 7F
fmdjyl:轉錄至看板 ASM 08/25 23:38

08/26 00:06, , 8F
一樓就是答案了 如果8051吃不下sscanf的話就要自己寫
08/26 00:06, 8F

08/26 00:45, , 9F
提示:用ASCII算,'1'-'9'和'A'-'F'的ASCII值是連續的。
08/26 00:45, 9F

08/26 00:48, , 10F
(我記得有次在8051用sprintf結果程式變得爆肥...)
08/26 00:48, 10F

08/26 00:51, , 11F
不少標準函式庫的function都會讓8051 code size爆增 XD
08/26 00:51, 11F

08/26 00:57, , 12F
除以十不就得了...
08/26 00:57, 12F

08/26 11:16, , 13F
樓上正解.就/10 %10... 謝謝大家幫忙解惑~
08/26 11:16, 13F
文章代碼(AID): #1CTF8CRO (C_and_CPP)