power在c语言什么意思,2009计算机二级C语言:sscanf在PowerPC下的小技巧

2009计算机二级C语言:sscanf在PowerPC下的小技巧

分类:计算机等级

|

更新时间:2016-07-07|

来源:中华网考试

#include

typedef unsigned char uint8;

int main()

{

char szMAC[18]; //fa:a0:b0:00:3e:4d

uint8 mac[6];

strcpy(szMAC,"fa:a0:b0:00:3e:4d");

sscanf("%02x:%02x:%02x:%02x:%02x:%02x",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);

return 0;

}

上面这段代码的意思,是想将字符串的MAC转化成数值。在x86平台下,一切都能正常通过。mac数组得到了我们想要的结果。可是到了Power平台下,就郁闷了,mac数组全是0。这是为什么呢?

首先,我们应该了解一下两种CPU的区别。x86属于LITTLE_ENDIAN,而Power属于BIG_ENDIAN。那什么是LITTLE_ENDIAN、BIG_ENDIAN呢?

下面,我来举个例子。一个32位的整型数,如0x12345678,在不同平台下,存放形式:

内存地址 LITTLE_ENDIAN BIG_ENDIAN

0x0000 78 12

0x0001 56 34

0x0002 34 56

0x0003 12 78

然后,就是"02x"了。它指的是一个16进制数。可是占多少位呢?这就要看你的CPU是多少的位了。一般来说,现在的CPU,都是32位。其实,也就是一个整型数占多少位。

在x86(32位)平台下,先将mac[0]填充为"fa",但是"02x"要占用32位,所以它分别又将mac[1]、mac[2]和mac[3]填充为0(0x000000fa)。其实,此时已经属于越界访问了,但程序并不会出错。下面的以此类推。

在Power(32位)平台下,同理。但是要注意的是,它是将高位字节填充到低地址中。所以,这样下去后,整个mac数组就是全0了。

修正程序,如下:

#include

typedef unsigned char uint8;

int main()

{

char szMAC[18]; //fa:a0:b0:00:3e:4d

uint8 mac[6];

strcpy(szMAC,"fa:a0:b0:00:3e:4d");

sscanf("%hhx:%hhx:%hhx:%hhx:%hhx:%hhx",&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]);

return 0;

}

"hh"表示转换成一个8位的16进制数。这样问题,就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值