[C语言] 怎么用C语言把00 00 0E 50转化成十进制的3664

[复制链接]
3966|20
 楼主| 冰冷的游客 发表于 2014-8-7 09:28 | 显示全部楼层 |阅读模式
nethopper 发表于 2014-8-7 09:50 | 显示全部楼层
long i;   i=strtol("00000E50",NULL,16);
 楼主| 冰冷的游客 发表于 2014-8-7 10:15 | 显示全部楼层
nethopper 发表于 2014-8-7 09:50
long i;   i=strtol("00000E50",NULL,16);

那怎么把00 00 0E 50 转换成字符串啊
nethopper 发表于 2014-8-7 10:22 | 显示全部楼层
如果00 00 0E 50不是字符串的话,那就是数值了,数值不需要转换吧,比如:  i = 0x00000E50 = 3664,  不太明白你的要求
 楼主| 冰冷的游客 发表于 2014-8-7 10:29 | 显示全部楼层
nethopper 发表于 2014-8-7 10:22
如果00 00 0E 50不是字符串的话,那就是数值了,数值不需要转换吧,比如:  i = 0x00000E50 = 3664,  不太明 ...

就是我收到一帧数据需要把它转换成整数
shell.albert 发表于 2014-8-7 10:37 | 显示全部楼层
用函数吧 strtoul
ayb_ice 发表于 2014-8-7 10:38 | 显示全部楼层
0*1 + 5 * 16 + 14 * 256 + 0 * ...
 楼主| 冰冷的游客 发表于 2014-8-7 10:45 | 显示全部楼层
nethopper 发表于 2014-8-7 10:22
如果00 00 0E 50不是字符串的话,那就是数值了,数值不需要转换吧,比如:  i = 0x00000E50 = 3664,  不太明 ...


搞定了,我又加了一个sprintf()把数值转化成字符串然后再用strtol转化成长整型

评论

简单问题复杂的典范.直接就是你要的数值了,还来个sprintf/str2l  发表于 2014-8-7 22:45
longmaodo 发表于 2014-8-7 10:46 | 显示全部楼层
冰冷的游客 发表于 2014-8-7 10:29
就是我收到一帧数据需要把它转换成整数

简单的办法就是
buf[0] = 0x50;
buf[1] = 0x0e;
buf[2] = 0x00;
buf[3] = 0x00;
int i = buf[0]|(buf[1]<<8)|(buf[2]<<16)|buf[3]<<24;
还有一种可以使用联合体
uiion {
int i;
unsigned char d[4];
}id;
id.d[0] = 0x00;
id.d[1] = 0x00;
id.d[2] = 0x0e;
id.d[3] = 0x50;
id.i 就是一个完整的数了
不过联合体对于你这个是有点大材小用了
nethopper 发表于 2014-8-7 10:48 | 显示全部楼层
Byte1=0x00; Byte2=0x00, Byte3=0x0E, Byte4=0x50, DWORD i;  i = (Byte1<<24) + (Byte2<<16) + (Byte3<<8) + Byte4;
Ketose 发表于 2014-8-7 10:58 | 显示全部楼层
用sprintf格式化输出,把数字转字符串。
 楼主| 冰冷的游客 发表于 2014-8-7 11:05 | 显示全部楼层
嗯嗯,现在转换OK了,又出现越界了,问题真多,谢谢大家了
rszhao 发表于 2014-8-7 15:36 | 显示全部楼层
调试 慢慢来 有问题解决了 就是进步和财富
朝阳之光 发表于 2014-8-7 15:44 来自手机 | 显示全部楼层
zhjerry 发表于 2014-8-7 18:16 | 显示全部楼层
u32 i;
u8 buf[4];
buf[0] = 0x50;
buf[1] = 0x0e;
buf[2] = 0x00;
buf[3] = 0x00;
i = *(u32*)buf;

评论

这样做是前提的:必须是小端系统才行  发表于 2014-8-7 21:24
mcu5i51 发表于 2014-8-8 14:19 | 显示全部楼层
使用结构体或数组,指针类的千万注意大小端问题
longmaodo 发表于 2014-8-8 15:47 | 显示全部楼层
zhjerry 发表于 2014-8-7 18:16
u32 i;
u8 buf[4];
buf[0] = 0x50;

i = *(u32*)buf;
请问这句怎么理解呀
buf可以看成一个指针
那么(u32*)buf就是取buf指针指向的地址下的数据
不就已经是把数据取出来了吗 怎么前面还有一个*
不理解 能否指导一二
zhjerry 发表于 2014-8-8 17:16 | 显示全部楼层
longmaodo 发表于 2014-8-8 15:47
i = *(u32*)buf;
请问这句怎么理解呀
buf可以看成一个指针

buf是u8类型数组指针,被(u32*)强制转化为u32变量指针,通过最前面的*取得对应的变量。
对应大端系统,buf[4]数组的内容需按逆序修改。
匿名  发表于 2014-8-10 18:57
前面加0x就可以了

#include &lt;stdio.h&gt;
main()
{
        long h=0x00000E50;
        printf(&quot;%ld&quot;,h);
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
longmaodo 发表于 2014-8-11 09:45 | 显示全部楼层
zhjerry 发表于 2014-8-8 17:16
buf是u8类型数组指针,被(u32*)强制转化为u32变量指针,通过最前面的*取得对应的变量。
对应大端系统,buf ...

谢谢 谢谢 (u32*)是强制转换呀 还得多看看基础语法呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

75

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部