sprintf使用问题

大头猫 2011-07-15 11:19:48
sprintf (lpInBuffer1,"%x",(unsigned short)lpInBuffer[0]);
在lpInBuffer[0]存入ff转成16进制的数据
用上面的函数总得到ffff,怎么才能得到ff?
...全文
182 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
非鱼boy 2011-07-16
  • 打赏
  • 举报
回复
sprintf会默认按照32位输出,所以即使你的lpInBuffer1里存的是ff,输出的时候也会输出,ffff。个人观点,还没有验证。
mymtom 2011-07-16
  • 打赏
  • 举报
回复
sprintf (lpInBuffer1,"%x",(unsigned char)lpInBuffer[0]);
AnYidan 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]

%02x
[/Quote]
++
某某9 2011-07-16
  • 打赏
  • 举报
回复
%02x
大头猫 2011-07-16
  • 打赏
  • 举报
回复
程序很严谨的。楼上的都不对",(unsigned short)lpInBuffer[0])写成byte)lpInBuffer[0])
mymtom 2011-07-16
  • 打赏
  • 举报
回复
原因是类型转换引起的
lpInBuffer[0] 的类型为char 0xff 也就是-1
(unsigned short)lpInBuffer[0]会将lpInBuffer[0]的符号位扩展称为0xffff

[Quote=引用 8 楼 mymtom 的回复:]

C/C++ code
sprintf (lpInBuffer1,"%x",(unsigned char)lpInBuffer[0]);
[/Quote]
至善者善之敌 2011-07-15
  • 打赏
  • 举报
回复
修正一下上面的

int main()
{
int lpInBuffer[1]={255};
char *lpInBuffer1=new char[10];
sprintf(lpInBuffer1,"%x",(unsigned short)lpInBuffer[0]);
cout<<lpInBuffer1<<endl;
delete [] lpInBuffer1;
}
至善者善之敌 2011-07-15
  • 打赏
  • 举报
回复

int main()
{
int lpInBuffer[1]={255};
char *lpInBuffer1=new char[10];
sprintf(lpInBuffer1,"%x",(unsigned short)lpInBuffer[0]);
cout<<lpInBuffer1<<endl;
delete lpInBuffer1;
}
lwtsea 2011-07-15
  • 打赏
  • 举报
回复
楼上正解
jackyjkchen 2011-07-15
  • 打赏
  • 举报
回复
%02x

69,382

社区成员

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

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