我有以下数据
uint8_t d1=0x01;
uint8_t d2=0x02;
Run Code Online (Sandbox Code Playgroud)
我想将它们合并为uint16_t为
uint16_t wd = 0x0201;
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
md5*_*md5 35
您可以使用按位运算符:
uint16_t wd = ((uint16_t)d2 << 8) | d1;
Run Code Online (Sandbox Code Playgroud)
因为:
(0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201
Run Code Online (Sandbox Code Playgroud)
R..*_*R.. 12
最简单的方法是:
256U*d2+d1
Run Code Online (Sandbox Code Playgroud)
这很简单.你不需要演员表,你不需要临时变量,你不需要黑魔法.
uint8_t d1=0x01;
uint8_t d2=0x02;
uint16_t wd = (d2 << 8) | d1;
Run Code Online (Sandbox Code Playgroud)
这始终是明确定义的行为,因为d2始终是正值,并且永远不会溢出,只要d2 <= INT8_MAX.
(INT8_MAX在stdint.h中找到).