【发布时间】:2012-11-20 00:36:29
【问题描述】:
我还有一个深夜的脑残问题。这可能很简单,但您知道在 8 小时以上的编程之后到达最后期限的情况。 :)
这是我的问题..
我有一个长度为 10 的布尔数组,它在逻辑上被分成单独的部分来保存 4 个不同的整数位数组(作为布尔值)。这是目标数组:
bool[] myArray = new bool[10];
这是我要插入的 4 个整数:
int value1 = 3; // 2 bits, myArray[0-1], 11
int value2 = 12; // 4 bits, myArray[2-5], 1100
int value3 = 2; // 2 bits, myArray[6-7], 10
int value4 = 1; // 2 bits, myArray[8-9], 01
myArray 最终应该如下所示(注意第一个元素是位置 0):
{(T,T),(T,T,F,F),(T,F),(F,T)}
那么最终我想做的就是将 myArray 转换为 int 值:
0x1111001001 = 969
也许有更好的方法来做到这一点而不必使用布尔值?因此,让我在更一般的意义上重新表述我的问题:
我如何连接 N 个 int 值到一个 target int 中?
谢谢!
【问题讨论】:
-
不是答案,但我认为更适合您的工具是 BitArray 类
-
我不明白为什么
value4(1)贡献了两个位,01。我认为它应该只给 one 位?如果每个int值根据其大小贡献 0 到 31 位,那么编码可能会很有趣。 -
@Jeppe 即使 value4 为 1,它也需要 2 位,因为它可以是 0 到 3。在我的示例中,我只使用了值 1。
-
@JanTacci 在这种情况下,我下面的回答对你来说不是正确的。对于我的回答,not 对位长度
2;4;2;2进行硬编码。相反,它总是采用尽可能短的位长。因此它不会像您需要的那样返回固定长度的位模式 (10=2+4+2+2)。
标签: c# arrays int concatenation