看板 Programming 關於我們 聯絡資訊
一般看到這標題, 應該都是使用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