作者fmdjyl (小D(滴))
看板C_and_CPP
標題[問題] 16進和10進轉換程式(8051)
時間Wed Aug 25 18:35:54 2010
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
→ hilorrk:sscanf、sprintf 08/25 18:38
→ tomnelson:sscanf("0x%02X", &h); -> sprintf(s, "%d", h); 08/25 18:47
→ tomnelson:或者也可以自己算,取"0x"後面兩位自己算. 08/25 18:47
※ 編輯: fmdjyl 來自: 219.85.43.81 (08/25 18:58)
→ MOONRAKER:strtoul() 08/25 19:46
→ tinlans:不管你外面輸入進去的是幾進制,電腦內部存的都是二進制。 08/25 20:12
推 cooljony0109:好像都有現成的function可以呼叫 08/25 21:24
※ 編輯: fmdjyl 來自: 122.116.80.6 (08/25 23:26)
→ fmdjyl:不好意思 忘記說是8051...用C語言 08/25 23:27
※ fmdjyl:轉錄至看板 ASM 08/25 23:38
→ james732:一樓就是答案了 如果8051吃不下sscanf的話就要自己寫 08/26 00:06
推 saxontai:提示:用ASCII算,'1'-'9'和'A'-'F'的ASCII值是連續的。 08/26 00:45
→ james732:(我記得有次在8051用sprintf結果程式變得爆肥...) 08/26 00:48
推 saxontai:不少標準函式庫的function都會讓8051 code size爆增 XD 08/26 00:51
→ hilorrk:除以十不就得了... 08/26 00:57
→ fmdjyl:樓上正解.就/10 %10... 謝謝大家幫忙解惑~ 08/26 11:16