[問題] C 二維字串轉整數

看板Programming作者 (愛得華)時間9年前 (2015/12/30 14:10), 編輯推噓2(2010)
留言12則, 3人參與, 最新討論串1/1
一般看到這標題, 應該都是使用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

12/30 15:48, , 1F
strtol(book[i],null,16) 這是用16進位
12/30 15:48, 1F

12/30 15:48, , 2F
解讀book[i] 不是轉16進位
12/30 15:48, 2F

12/30 15:50, , 3F
16進位的255就大於uint8上限了 所以當然
12/30 15:50, 3F

12/30 15:50, , 4F
就爆了
12/30 15:50, 4F

12/30 16:02, , 5F
1.如果照你的期望值c ff 20換算 初始值10
12/30 16:02, 5F

12/30 16:02, , 6F
255 32 好像是10進位吧 2.初始值10也不
12/30 16:02, 6F

12/30 16:02, , 7F
對 應該是 12 否則期望值怎麼會是c 3.如
12/30 16:02, 7F

12/30 16:02, , 8F
果初始值為10進, strtol應該用10去轉換 4.
12/30 16:02, 8F

12/30 16:02, , 9F
book[3][3] 字串長度不足 須再加一位空間
12/30 16:02, 9F

12/30 16:02, , 10F
做結束字元/0
12/30 16:02, 10F

12/31 01:03, , 11F
\0,不是/0。
12/31 01:03, 11F

12/31 01:04, , 12F
你字串破掉了-先修好這個再談別的。
12/31 01:04, 12F
文章代碼(AID): #1MWtK-bX (Programming)
文章代碼(AID): #1MWtK-bX (Programming)