作者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://webptt.com/cn.aspx?n=bbs/Programming/M.1451455806.A.961.html
1F:推 iamnotgm: strtol(book[i],null,16) 这是用16进位 61.56.12.194 12/30 15:48
2F:→ iamnotgm: 解读book[i] 不是转16进位 61.56.12.194 12/30 15:48
3F:推 iamnotgm: 16进位的255就大於uint8上限了 所以当然 61.56.12.194 12/30 15:50
4F:→ iamnotgm: 就爆了 61.56.12.194 12/30 15:50
5F:→ catmia: 1.如果照你的期望值c ff 20换算 初始值10 220.133.19.183 12/30 16:02
6F:→ catmia: 255 32 好像是10进位吧 2.初始值10也不 220.133.19.183 12/30 16:02
7F:→ catmia: 对 应该是 12 否则期望值怎麽会是c 3.如 220.133.19.183 12/30 16:02
8F:→ catmia: 果初始值为10进, strtol应该用10去转换 4. 220.133.19.183 12/30 16:02
9F:→ catmia: book[3][3] 字串长度不足 须再加一位空间 220.133.19.183 12/30 16:02
10F:→ catmia: 做结束字元/0 220.133.19.183 12/30 16:02
11F:→ MOONRAKER: \0,不是/0。 218.161.46.90 12/31 01:03
12F:→ MOONRAKER: 你字串破掉了-先修好这个再谈别的。 218.161.46.90 12/31 01:04