开发者社区> 问答> 正文

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

#define GETBYTE2(r,p) \

do \

{\

    unsigned char *x = (unsigned char *)p; \

    r = ((unsigned short)x[0] << 16) | ((unsigned short)x[1] << 8) | ((unsigned short)x[2]); \

}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]);

在编译的时候总是报错,不知道宏定义那里出错了。

展开
收起
kun坤 2020-05-30 14:26:22 547 0
1 条回答
写回答
取消 提交回答
  • 顶起啊,坐等问题解决,大神们###### unsigned short date = GETBYTE_2((unsigned short*)(&ptr[1]));
    这样应该就可以通过了,不过你的那个数组明显定义有错误啊
    unsigned char  ptr[]= {1, 2,3, 4, 5,6 ,7 ,8 ,9};
    少了[],中间还多了好几个“,”, ######unsigned char ptr[] = {1,2,3,4,5,6,7};是没有问题的,谢谢你的答案,不过问题还没有解决.

    2020-05-30 14:26:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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