开发者社区> 问答> 正文

C语言宏定义 取前两个字节问题?报错

#define GETBYTE2(r,p) </span>
do </span>
{</span>
    unsigned char *x = (unsigned char )p; </span>
    r = ((unsigned short)x[0] << 16) | ((unsigned short)x[1] << 8) | ((unsigned short)x[2]); </span>
}while(0)
这个是之前的定义在使用的时候
GETBYTE_2(unsigned short  date, unsigned char
ptr)


看起来不是很方便,所以准备改进一下:
#define GETBYTE_2(psrc) (unsigned short)(((unsigned short)psrc[0] << 8) | ((unsigned short)psrc[1]))
在使用的时候
unsigned char  ptr= {1, 2, ,3, 4, 5, ,6 , ,7 ,8 ,9};
unsigned short date = GETBYTE_2(&ptr[1]);
在编译的时候总是报错,不知道宏定义那里出错了。

展开
收起
爱吃鱼的程序员 2020-06-14 20:33:53 651 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    顶起啊,坐等问题解决,大神们

    unsignedshortdate=GETBYTE_2((unsignedshort*)(&ptr[1]));

    这样应该就可以通过了,不过你的那个数组明显定义有错误啊

    unsignedchar ptr[]={1,2,3,4,5,6,7,8,9};

    <spanstyle="line-height:1.5;font-size:10pt;">少了[],中间还多了好几个“,”,

    unsignedcharptr[]={1,2,3,4,5,6,7};是没有问题的,谢谢你的答案,不过问题还没有解决.

    2020-06-14 20:34:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载