如何将任何类型的转化成 char* ; 或者把char * 转型成int,或者float?

chrix 2004-03-22 11:50:27
是这样的,一个负责UI显示的函数参数必须是char*的,但是我的结果可能是float的,用强制转型肯定会丢失信息,怎么样把它转化成char*呢?反过来又怎么办呢?
还有一个前提是不能用c标准库函数,因为是在嵌入式系统里面
...全文
225 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbaby 2004-03-23
  • 打赏
  • 举报
回复
记得以前在文档区看到过一篇这样的文章,可惜现在找不到了
如果能采用标准库是最好不过了,
如果不能用,但手头上有一种标准库的实现,仿写一个也末尝不是一个好办法。
可惜现在手头上没有这些,只好写一个,可能有什么地方有差错
建议去找一下gcc的库的源文件,仿写应该是很好写的。


int a2i(const char *str)
{
int tmp = 0;
char neg = 0;/* 是否是负数*/
if(*str == '-')
{ neg =1 ;
str++;
}
while( *str)
{
if( (*str > '0') && (*str <= '9') ) /*认为char *中的字符所采用的记数基数是10 */
{ tmp = tmp*10 + *str -'0' ;}
str ++;
}
if( neg )
{
tmp = -tmp;
}

return tmp;

}

#include <stdio.h>
int main(void)
{
char *str ="-12345a6a";
printf("%d",a2i(str));
return 0;
}
wlk 2004-03-23
  • 打赏
  • 举报
回复
float f=0.2;
char temp[32];
memset(temp,0,sizeof(temp));
sprintf(temp,"%5.2f",f);

yxzamy 2004-03-23
  • 打赏
  • 举报
回复
char ss[50]
for(i=0;i<n;i++)
{
ss[i]=(char)(s[i]+48)
}
如果这样强制转换不可以的话
for(i=0;i<n;i++)
{if(s[i]==0)
ss[i]='0';
else if(s[i]==1)
ss[i]='1';
……
}
这样总可以吧? 我就不信,int变不成char
tass 2004-03-23
  • 打赏
  • 举报
回复
up
yxzamy 2004-03-22
  • 打赏
  • 举报
回复
假设是求f
float c;
int b,s[50];
b=int(f);
c=f-b;
for(i=0;c!=0;i++)
{c=c*10;
s[i]=int(c);
c=c-s[i];
}
整数部分都在b里面,小数在s里面,可以了吧?
chrix 2004-03-22
  • 打赏
  • 举报
回复
怎么写?
我没有头绪……
langziji 2004-03-22
  • 打赏
  • 举报
回复
肯定不能进行强制转换,你可以自己写把浮点转成char*的字符串的程序呀
chrix 2004-03-22
  • 打赏
  • 举报
回复
没有人知道吗?
chrix 2004-03-22
  • 打赏
  • 举报
回复
TO winter_sui(头上有个包) :
是8154.97这种形式
chrix 2004-03-22
  • 打赏
  • 举报
回复
TO: yxzamy(读不懂)
在很多嵌入式系统里面,char可以转成int,int不能转成char
原因很简单,int占用的存储空间比char大。
感谢你的热心。
yxzamy 2004-03-22
  • 打赏
  • 举报
回复
有很多问题是可以自己解决的,不要太以来别人的函数了,我宁愿自己写。
yxzamy 2004-03-22
  • 打赏
  • 举报
回复
楼主啊,不是我的代码有问题,是你没有想明白问题啊,我都放在两个int里了,你不会在把他放到一个char数组里?int和char是可以很容易转换的,你要是不知道的话就不要随便批评,回去好好的看看书。
winter_sui 2004-03-22
  • 打赏
  • 举报
回复
是哪种显示方式?
比如 f = 8154.97;
是显示成:8154.97还是0.815497E4
chrix 2004-03-22
  • 打赏
  • 举报
回复
我想要的是不用库函数的实现方法……
谢谢各位
chrix 2004-03-22
  • 打赏
  • 举报
回复
sprintf好像是库函数…………
zxl_lim 2004-03-22
  • 打赏
  • 举报
回复
好象有atoi(..) itoa(..)什么的一类函数
查查MSDN
langziji(IT的民工) 的也是好方法
langziji 2004-03-22
  • 打赏
  • 举报
回复
float fv = 3.12;
char temp[32];
sprintf(temp, "%f", fv);

=======================
temp里面的内容:"3.12",可能还有0.然后就可以打印出来了。
chrix 2004-03-22
  • 打赏
  • 举报
回复
楼上的,我想要的是把float型转换成char*类型然后作为参数传给一个函数,而不是要把float转化成两个int型来表示
BTW,你的代码有很多问题。

70,020

社区成员

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

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