c# - 将两个数字打包成一个 Int32
问题描述
我正在向连接的设备发送数据,并且出现了一个问题,即从设备返回的一个整数包含两个 id。一个封装在 10 个 LSB 位中,第二个封装在 22 个 MSB 位中。从本网站的帮助中,我找到了如何解析这两个数字(无论如何我相信这是正确的):
//10 LSB bits
var nodeID = source & 0x3FF; //mask 10 LSBs
//22 MSB bits: mask + bitshift
var companyID = (source & 0x3FFFFF) >> 10;
现在我需要从两个数字(分别为 10 位和 22 位)创建一个 int32 并再次需要一些方向。涉及的步骤是什么?
谢谢!
解决方案
好吧,看来你有
companyID nodeID
<- 22 -> <-10->
格式。如果是你的情况,你可以
var nodeID = source & 0x3FF; // Rightmost 10 bits: just mask
var companyID = (source >> 10) & 0x3FFFFF; // Move to the right, then mask
请注意,companyID
您应该首先将其向右移动以去除最左边的10
( nodeID
) 位:
最初的:
companyID nodeID
<- 22 -> <-10->
移位( >> 10
) 后:
sssssssss companyID
sign bits <- 22 ->
掩蔽后( & 0x3FFFFF
):
00..00 companyID == companyID
<-10-> <- 22 ->
撤销:
var encoded = (CompanyID << 10) | nodeID
推荐阅读
- templates - Intellij 文件模板:如何动态设置文件名
- android - Android 生物识别:IllegalStateException。必须注册至少一项生物特征才能创建需要用户身份验证的密钥
- excel - 将 Sub 作为参数传递
- javascript - 单击父级时触发子级单击事件
- python - Bootstrap 主题不使用烧瓶充电
- flutter - 导航器推送时抛出错误:“!_debugLocked':不正确。”
- javascript - 在 React Native 中使用组件导入获取错误“元素类型无效预期字符串”
- html - 是否有任何维护良好的 Web 约束布局?
- android - 如何在安卓手机中小跑或设置网速?
- javascript - 将 [op.and] 添加到 Sequelize 查询对象