如何提取uint16_t的高15位并赋值给结构体stn字段?
提取stn变量的方法
你可以通过右移操作提取剩余15位并赋值给stn:
composedTrackNumber.stn = tmp1 >> 1;
原理说明
tmp1是16位无符号整数,fx对应最低位(第0位)。将tmp1右移1位后,最低位会被丢弃,剩下的正好是高15位数据,也就是stn需要的内容。- 因为
uint16_t是无符号类型,右移时高位会补0,不会出现符号扩展的问题,直接赋值给15位的stn位域完全安全。
如果想要更严谨(明确限制只取15位),也可以配合掩码操作:
composedTrackNumber.stn = (tmp1 >> 1) & 0x7FFF;
0x7FFF对应16位二进制的0111 1111 1111 1111,用来确保只保留目标15位数据(右移后的结果本身已经是15位,这一步属于可选的冗余校验)。
内容的提问来源于stack exchange,提问作者tj26
相关产品推荐
相关产品推荐

