c# - C# 写入 8 位数据包,分成 3 个整数
问题描述
我需要在这个分区中编写一个 8 位数据包,其中包括 3 个整数:
int1 = 1 bit
int2 = 1 bit
int3 = 6 bit
我不知道该怎么做。我可以写一些 4 字节的数据包,使用这个对我们有用的函数:
buffer.AddRange(BitConverter.GetBytes(_value));
但是我需要帮助来编写一个 8 位数据包,该数据包分为许多整数(或位元素)。我已经阅读过有关 BitArray 的信息,但我真的不知道如何使用它。我已经写了一些代码,但不知道它是否真的可以工作:
bool playback = false;
bool extExerciseNum = false;
BitArray byte4 = new BitArray(2);
byte4.Set(0, playback);
byte4.Set(1, extExerciseNum);
在这里,我假装使用前 2 个单独的整数创建一个 BitArray。
int exerciseNumber = 23;
BitArray b = new BitArray(new int[] { exerciseNumber });
int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();
在这里,我假装写了一个 6 位长度的 BitArray(顺便说一下,我没有正确理解它)。
任何人都可以帮助我如何正确编写这个包?太感谢了!!
解决方案
假设int1
应该占据最高有效位 (MSB),使用位移和或来产生 8 位值:
byte result = (byte)((int1 << 7) | (int2 << 6) | int3);
(不包括范围检查)。对于其他位顺序(int1
应占用最低有效位):
byte result = (byte)(int1 | (int2 << 1) | (int3 << 2));
推荐阅读
- mysql - 在mysql中转义印地语字符
- python-3.x - Python的scipy空间KD树比蛮力欧几里得距离慢?
- javascript - 返回数组中的一个单词
- c# - 流代理 ASP.NET CORE 中的实时流
- python - 如何删除 matplotlib_venn 中的数据标签?
- stata - 从变量中随机选择数字
- python - 如何将表格中的信息显示导出到excel django
- cmake - CMake分别为每个对象执行归档程序
- arduino - 即使我在 digitalWrite(ledpin,LOW); 之后添加了延迟,我的 Led 也不会增加其正常运行时间;
- android - 使用套接字将视频从媒体记录器 (Android) 流式传输到 Node Js 服务器