gpt4 book ai didi

c# - 在一个字节中组合 2 个数字

转载 作者:太空狗 更新时间:2023-10-30 00:25:39 25 4
gpt4 key购买 nike

我有两个数字(从 0 到 9),我想将它们组合成 1 个字节。数字 1 占用位 0-3,数字 2 占用位 4-7。

示例:我有数字 3 和 4。
3 = 0011 和 4 是 0100。
结果应该是 0011 0100。

如何用这些二进制值创建一个字节?

这是我目前拥有的:

    public Byte CombinePinDigit(int DigitA, int DigitB)
{
BitArray Digit1 = new BitArray(Convert.ToByte(DigitA));
BitArray Digit2 = new BitArray(Convert.ToByte(DigitB));

BitArray Combined = new BitArray(8);
Combined[0] = Digit1[0];
Combined[1] = Digit1[1];
Combined[2] = Digit1[2];
Combined[3] = Digit1[3];

Combined[4] = Digit2[0];
Combined[5] = Digit2[1];
Combined[6] = Digit2[2];
Combined[7] = Digit2[3];
}

使用这段代码我有 ArgumentOutOfBoundsExceptions

最佳答案

忘记所有那些位数组的东西。

只需这样做:

byte result = (byte)(number1 | (number2 << 4));

为了让他们回来:

int number1 = result & 0xF;
int number2 = (result >> 4) & 0xF;

这是通过使用 << 来实现的和 >>位移运算符。

创建字节时,我们正在移动 number2左 4 位(用 0 填充结果的最低 4 位)然后我们使用 |或那些具有未移位位的位 number1 .

当恢复原始数字时,我们将这个过程颠倒过来。我们将字节 移动 4 位,将原始 number2回到原来的位置然后我们使用& 0xF屏蔽任何其他位。

此位为 number1将已经处于正确的位置(因为我们从未移动过它们)所以我们只需要屏蔽掉其他位,再次使用 & 0xF .

在执行此操作之前,您应该验证数字是否在 0..9 范围内,或者(如果您不关心它们是否超出范围)您可以通过使用 0xF 将它们限制在 0..15 :

byte result = (byte)((number1 & 0xF) | ((number2 & 0xF) << 4));

关于c# - 在一个字节中组合 2 个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com