ijlc1314 发表于 2012-7-23 18:10:07

如果最快的操作一个16位数的高8位?


现在我能想到的就是使用共用体,不知道还有没有什么方法可以最快的操作一个16位变量的高八位,比如,给一个16位数的高8位赋值

XIVN1987 发表于 2012-7-23 18:14:07

uint16_t v16;
大端模式:
uint8_t *pv8 = (uint8_t *)(&v16);

小端模式:
uint8_t *pv8 = (uint8_t *)(&v16);
pv8++;

然后应该就可以任意操作高8位了。。。

hefq 发表于 2012-7-23 18:14:36

#define s2ch(i) (*(uc*)(&(i)))
#define s2cl(i) *(((uc*)(&(i)))+1)

ijlc1314 发表于 2012-7-23 23:03:22

XIVN1987 发表于 2012-7-23 18:14 static/image/common/back.gif
uint16_t v16;
大端模式:
uint8_t *pv8 = (uint8_t *)(&v16);


谢谢,终于知道怎么样用了,指针真是强大啊

ijlc1314 发表于 2012-7-23 23:04:02

hefq 发表于 2012-7-23 18:14 static/image/common/back.gif
#define s2ch(i) (*(uc*)(&(i)))
#define s2cl(i) *(((uc*)(&(i)))+1)

这方法好,可以不使用共用体了,谢谢大侠

壹佰法拉 发表于 2012-7-25 23:26:51

本帖最后由 壹佰法拉 于 2012-7-25 23:38 编辑

我操作一个字节的某位或某些位就是直接用“与”,“或”,“移位”;速度快,代码小;局部使用很潇洒!
用 union 操作方便,直观!长篇大论用着好!

例如:

intTest=0;

给这个变量高8位赋值 0XAB;低8位赋值 0XCD;

   Test=0X00AB;
   Test=Test<<8;//到这里已经给高8位赋值完毕

   Test&=0XFF00;   //清零低8位;保护高8位;
   Test|=0X00CD;   //直接给低8位赋值;






页: [1]
查看完整版本: 如果最快的操作一个16位数的高8位?