作者freeedward (愛得華)
看板Programming
標題[問題] C 二維字串轉整數
時間Wed Dec 30 14:10:02 2015
一般看到這標題, 應該都是使用atoi或是strtol就可以解決了
但我遇到一個奇怪的問題
我宣告了一個二維字元陣列去存數字, 並想要把他轉成hex, 但無法解決3個位元的問題
程式碼如下:
char book[3][3]={"10","255","32"};
int i=0,temp=0;
for(i=0;i<3;i++)
{
printf("book[%d]=%s\n",i,book[i]);
temp=(uint8_t)strtol(book[i],NULL,16);
printf("temp=%x\n",temp);
}
執行結果:
book[0]=12
temp=12
book[1]=25532
temp=32
book[2]=32
temp=32
希望結果:
temp=c
temp=ff
temp=20
請問問題是發生在哪裡呢?
--
~meow
★ Butter Yuki Cat ★ meow~
△ △
★ ╭ ╦╗ ═ ╭╬╗ ═╦═ ╦ ╬═╬ ╠╣ ╬═╬ ★ ▲ ▲
=▏ ̄▕=
★ ╬╬║║ ║║║ ║ ║ ╠═╣ ╠╬╗╭╦╗ ★ =███=
\_/
★ ║║║╩╗ ═ ╠╬╣ ═╬═ ╬ ╠═╣ ╭═╣╠╬╣ ★ ◥█◤
ζ∕ ﹨
★ ╚╬║ ║ ║║║║ ║╮ ║ ╩═╩ ╭═╣║║║ ★ ▌█▋▋
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.158.249
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1451455806.A.961.html
推 iamnotgm: strtol(book[i],null,16) 這是用16進位 61.56.12.194 12/30 15:48
→ iamnotgm: 解讀book[i] 不是轉16進位 61.56.12.194 12/30 15:48
推 iamnotgm: 16進位的255就大於uint8上限了 所以當然 61.56.12.194 12/30 15:50
→ iamnotgm: 就爆了 61.56.12.194 12/30 15:50
→ catmia: 1.如果照你的期望值c ff 20換算 初始值10 220.133.19.183 12/30 16:02
→ catmia: 255 32 好像是10進位吧 2.初始值10也不 220.133.19.183 12/30 16:02
→ catmia: 對 應該是 12 否則期望值怎麼會是c 3.如 220.133.19.183 12/30 16:02
→ catmia: 果初始值為10進, strtol應該用10去轉換 4. 220.133.19.183 12/30 16:02
→ catmia: book[3][3] 字串長度不足 須再加一位空間 220.133.19.183 12/30 16:02
→ catmia: 做結束字元/0 220.133.19.183 12/30 16:02
→ MOONRAKER: \0,不是/0。 218.161.46.90 12/31 01:03
→ MOONRAKER: 你字串破掉了-先修好這個再談別的。 218.161.46.90 12/31 01:04