打印
[C语言]

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

[复制链接]
3449|20
手机看帖
扫描二维码
随时随地手机跟帖
沙发
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,  不太明白你的要求

使用特权

评论回复
5
冰冷的游客|  楼主 | 2014-8-7 10:29 | 只看该作者
nethopper 发表于 2014-8-7 10:22
如果00 00 0E 50不是字符串的话,那就是数值了,数值不需要转换吧,比如:  i = 0x00000E50 = 3664,  不太明 ...

就是我收到一帧数据需要把它转换成整数

使用特权

评论回复
6
shell.albert| | 2014-8-7 10:37 | 只看该作者
用函数吧 strtoul

使用特权

评论回复
7
ayb_ice| | 2014-8-7 10:38 | 只看该作者
0*1 + 5 * 16 + 14 * 256 + 0 * ...

使用特权

评论回复
8
冰冷的游客|  楼主 | 2014-8-7 10:45 | 只看该作者
nethopper 发表于 2014-8-7 10:22
如果00 00 0E 50不是字符串的话,那就是数值了,数值不需要转换吧,比如:  i = 0x00000E50 = 3664,  不太明 ...


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

使用特权

评论回复
评论
李冬发 2014-8-7 22:45 回复TA
简单问题复杂的典范.直接就是你要的数值了,还来个sprintf/str2l 
9
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 就是一个完整的数了
不过联合体对于你这个是有点大材小用了

使用特权

评论回复
10
nethopper| | 2014-8-7 10:48 | 只看该作者
Byte1=0x00; Byte2=0x00, Byte3=0x0E, Byte4=0x50, DWORD i;  i = (Byte1<<24) + (Byte2<<16) + (Byte3<<8) + Byte4;

使用特权

评论回复
11
Ketose| | 2014-8-7 10:58 | 只看该作者
用sprintf格式化输出,把数字转字符串。

使用特权

评论回复
12
冰冷的游客|  楼主 | 2014-8-7 11:05 | 只看该作者
嗯嗯,现在转换OK了,又出现越界了,问题真多,谢谢大家了

使用特权

评论回复
13
rszhao| | 2014-8-7 15:36 | 只看该作者
调试 慢慢来 有问题解决了 就是进步和财富

使用特权

评论回复
14
朝阳之光| | 2014-8-7 15:44 | 只看该作者

使用特权

评论回复
15
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;

使用特权

评论回复
评论
cool_coder 2014-8-7 21:24 回复TA
这样做是前提的:必须是小端系统才行 
16
mcu5i51| | 2014-8-8 14:19 | 只看该作者
使用结构体或数组,指针类的千万注意大小端问题

使用特权

评论回复
17
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指针指向的地址下的数据
不就已经是把数据取出来了吗 怎么前面还有一个*
不理解 能否指导一二

使用特权

评论回复
18
zhjerry| | 2014-8-8 17:16 | 只看该作者
longmaodo 发表于 2014-8-8 15:47
i = *(u32*)buf;
请问这句怎么理解呀
buf可以看成一个指针

buf是u8类型数组指针,被(u32*)强制转化为u32变量指针,通过最前面的*取得对应的变量。
对应大端系统,buf[4]数组的内容需按逆序修改。

使用特权

评论回复
19
匿名  2014-8-10 18:57
前面加0x就可以了

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


使用特权

评论回复
20
longmaodo| | 2014-8-11 09:45 | 只看该作者
zhjerry 发表于 2014-8-8 17:16
buf是u8类型数组指针,被(u32*)强制转化为u32变量指针,通过最前面的*取得对应的变量。
对应大端系统,buf ...

谢谢 谢谢 (u32*)是强制转换呀 还得多看看基础语法呀

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

75

帖子

0

粉丝