C# 在Arduino C中交错两个二进制数
所以我遇到了一个奇怪的需要,需要“合并”两个数字:C# 在Arduino C中交错两个二进制数,c#,arduino,binary,arduino-uno,binary-data,C#,Arduino,Binary,Arduino Uno,Binary Data,所以我遇到了一个奇怪的需要,需要“合并”两个数字: byte one; byte two; 01001000 00010001 变成一个int三第一位是one的第一位,第二位是two的第一位,第三位是one的第二位,依此类推 因此,对于这两个数字: byte one; byte two; 01001000 00010001 会导致 000100100010 隔行操作的更直观的说明: byte one = 0 1 0 0 1 0 0 0 byte two = 0 0 0
byte one;
byte two;
01001000
00010001
变成一个int三
第一位是one
的第一位,第二位是two
的第一位,第三位是one
的第二位,依此类推
因此,对于这两个数字:
byte one;
byte two;
01001000
00010001
会导致
000100100010
隔行操作的更直观的说明:
byte one = 0 1 0 0 1 0 0 0
byte two = 0 0 0 1 0 0 0 1
result = 00 01 00 10 01 00 00 10
更新:对不起,完全误读了你的问题 以下代码应执行以下操作:
public static int InterlacedMerge(byte low, byte high)
{
var result = 0;
for (var offset = 0; offset < 8; offset++)
{
var mask = 1 << offset;
result |= ((low & mask) | ((high & mask)) << 1) << offset;
}
return result;
}
public static int InterlacedMerge(字节低,字节高)
{
var结果=0;
对于(变量偏移量=0;偏移量<8;偏移量++)
{
var mask=1@在我写这篇文章时,他们回答了我的问题;类似的解决方案,不同的措辞
您必须编写一个循环。您将在两个输入中的每一个中测试一位。您将在输出中为每个输入设置一位。您将所有三个值移到一个位置。可能类似于以下内容(未测试):
@是的,这是一个标准的位旋转。我会让代码更详细一点,让它更可读。转换成整数3;第一位是1的第一位,第二位是2的第一位,第三位是1的第二位,依此类推,对于01001000 0000001
应该根据您的解释e> 0010000111000001
但这不是00010010010000010
!我错了吗?嗨@Yahya,是的,这是我的第一个感觉,更像是“标准交错”…检查插图,我编辑了。作为实现,没有问题,只是交换的一种情况,在所提供的解决方案中使用f(b,a)
而不是f(a,b)
。