sscanf 读入uint8_t类型的16进制值,格式转换标识应该是什么,%x会越界

P_T_P 2011-07-08 03:25:23
eg:

uint16_t u1=0xff,u2=0xff,u3=0xff,u4=0xff;
char str[]="ab-cd";

我开始使用如下代码:
sscanf(str,"%x-%x",&u2,&u3);

执行结果 u2 == ab,u3=cd;
但是:
u1或u2(根据系统不同而不同,因为栈的增长方向)的值被改变,变为零。
所以这里发生了越界。


我想问各位大侠有木有合适的格式转换符来做这个事情,是%什么。
...全文
236 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lhcwjy 的回复:]

sscanf(str,"%c%c-%c%c",(char *)&u1,(char *)&u1+1,(char *)&u2,(char *)&u2+1);
[/Quote]
++
至善者善之敌 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lhcwjy 的回复:]
sscanf(str,"%c%c-%c%c",(char *)&u1,(char *)&u1+1,(char *)&u2,(char *)&u2+1);
[/Quote]


+++1
野男孩 2011-07-10
  • 打赏
  • 举报
回复
嗯,用uint32吧,被sscanf之后,再赋值给uint8
jixingzhong 2011-07-10
  • 打赏
  • 举报
回复
使用一个int接收输入后赋值。
白云飘飘飘 2011-07-10
  • 打赏
  • 举报
回复
sscanf(str,"%c%c-%c%c",(char *)&u1,(char *)&u1+1,(char *)&u2,(char *)&u2+1);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧