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)