标签: bitarray

适用于.NET Micro Framework的BitArray替代方案

是否有针对.NET Micro Framework的BitArray替代方案?我在考虑简单地使用bool [],但是如何将它转换回byte []?

在完整的框架中,考虑"位"是BitArray,以下工作:

byte[] data = new byte[dimensions / 8];
bits.CopyTo(data, 0);
Run Code Online (Sandbox Code Playgroud)

但我似乎无法在微框架中找到BitArray类

.net .net-micro-framework bitarray

3
推荐指数
1
解决办法
3153
查看次数

在 C# 中从 BitArray 转换为 16 位无符号整数

BitArray bits=new BitArray(16); // size 16-bit
Run Code Online (Sandbox Code Playgroud)

有 bitArray,我想在 C# 中将此数组中的 16 位转换为无符号整数,我不能使用 copyto 进行转换,是否还有其他方法可以从 16-bitto 转换为UInt16

c# asp.net int bit bitarray

3
推荐指数
1
解决办法
3560
查看次数

优化位阵列访问

我正在使用Dipperstein的bitarray.cpp类来处理双层(黑白)图像,其中图像数据本身就像一位像素一样存储.

我需要使用for循环遍历每个位,每个图像大约4-9百万像素,数百个图像,类似于:

for( int i = 0; i < imgLength; i++) {
    if( myBitArray[i] == 1 ) {
         //  ... do stuff ...
    }
}
Run Code Online (Sandbox Code Playgroud)

性能可用,但并不令人惊讶.我通过gprof运行程序,发现有很多时间和数百万次调用std::vector迭代器和开始等方法.这是顶部采样函数:

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
 37.91      0.80     0.80        2     0.40     1.01  findPattern(bit_array_c*, bool*, int, int, int)
 12.32      1.06     0.26 98375762     0.00     0.00  __gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char> > >::__normal_iterator(unsigned char const* const&)
 11.85      1.31     0.25 …
Run Code Online (Sandbox Code Playgroud)

c++ optimization stl vector bitarray

2
推荐指数
1
解决办法
1248
查看次数

将位转换为值

计算机如何知道(int x,y)x << y意味着移位y位?我不是指转变部分.我的意思是那y部分.计算机是否将x移位1并从y中减去1直到y == 0?如果不是,计算机如何计算y的值?

如果说y = 10,那么二进制表示是0b1010.计算机不能简单地拿走1010它并使用它,可以吗?

我试图为大于8的位大小.由于值不是简单地存储为标准整数的数组,容器不表示值,因此重载运算符<<并且>>有点困难.但是,从100位数字倒计数到0有点效率低,所以我试图找到一种方法让计算机更快地理解位数.

c++ math bit-shift mathematical-optimization bitarray

2
推荐指数
1
解决办法
127
查看次数

当使用Int32数组初始化时,BitArray以相反的顺序存储位

描述我错过理解的最好方法是使用代码本身:

var emptyByteArray = new byte[2];

var specificByteArray = new byte[] {150, 105}; //0x96 = 150, 0x69 = 105
var bitArray1 = new BitArray(specificByteArray);
bitArray1.CopyTo(emptyByteArray, 0); //[0]: 150, [1]:105

var hexString = "9669";
var intValueForHex = Convert.ToInt32(hexString, 16); //16 indicates to convert from hex
var bitArray2 = new BitArray(new[] {intValueForHex}) {Length = 16}; //Length=16 truncates the BitArray

bitArray2.CopyTo(emptyByteArray, 0); //[0]:105, [1]:150 (inversed, why??)
Run Code Online (Sandbox Code Playgroud)

我一直在读,bitarray从LSB迭代到MSB,那么从十六进制字符串开始初始化bitarray的最佳方法是什么呢?

c# endianness bitarray

2
推荐指数
1
解决办法
2423
查看次数

转换位数组以更快地设置

输入是存储在连续存储器中的比特阵列,每1比特存储器具有1比特的比特阵列.

输出是比特阵列的设定位索引的数组.

例:

bitarray: 0000 1111 0101 1010
setA: {4,5,6,7,9,11,12,14}
setB: {2,4,5,7,9,10,11,12}
Run Code Online (Sandbox Code Playgroud)

获得A组或B组都可以.该集存储为uint32_t数组,因此该集的每个元素都是数组中的无符号32位整数.

如何在单个cpu核心上快5倍左右?

当前代码:

#include <iostream>
#include <vector>
#include <time.h>

using namespace std;

template <typename T>
uint32_t bitarray2set(T& v, uint32_t * ptr_set){
    uint32_t i;
    uint32_t base = 0;
    uint32_t * ptr_set_new = ptr_set;
    uint32_t size = v.capacity();
    for(i = 0; i < size; i++){
        find_set_bit(v[i], ptr_set_new, base);
        base += 8*sizeof(uint32_t);
    }
    return (ptr_set_new - ptr_set);
}

inline void find_set_bit(uint32_t n, uint32_t*& ptr_set, uint32_t base){
    // Find the set bits …
Run Code Online (Sandbox Code Playgroud)

c++ sse bit-manipulation set bitarray

2
推荐指数
1
解决办法
196
查看次数

函数将十六进制字符串转换为BitArray C#

我创建了以下函数,它将按要求执行(将HEX字符串转换为BitArray).我不确定函数的效率,但我现在的主要问题是Convert.ToInt64函数是特定于endian的.当将其移植到备用芯片组时,我们将得到不同的结果(或例外).所以有人能想到另一种方法来进行这种转换吗???

public BitArray convertHexToBitArray(string hexData)
    {
        string binary_values = "";
        BitArray binary_array;

            if (hexData.Length <= "FFFFFFFFFFFFFFFF".Length) // Max Int64
            {
                binary_values = Convert.ToString(Convert.ToInt64(hexData, 16), 2);
                binary_array = new BitArray(binary_values.Length);

                for (int i = 0; i < binary_array.Length; i++)
                {
                    if (binary_values[i] == '0')
                    {
                        binary_array[i] = false;
                    }
                    else
                    {
                        binary_array[i] = true;
                    }
                }
            }
   }
Run Code Online (Sandbox Code Playgroud)

我删除了大部分错误/异常处理,以保持这个大小,所以请原谅.

c# hex bitmap endianness bitarray

1
推荐指数
2
解决办法
8427
查看次数

BitArray为整数问题

public static int getIntegerFromBitArray(BitArray bitArray)
{
  var result = new int[1];
  bitArray.CopyTo(result, 0);
  return result[0];
}

// Input  A) 01110
// Output A) 14
// Input  B) 0011
// Output B) 12 <=== ????? WHY!!! :)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下为什么我的第二个返回值是12而不是3?求求你了,谢谢你.

c# bitarray

1
推荐指数
1
解决办法
4614
查看次数

Ruby:将bitarray转换为整数

我试图转换一个位数组,如[0,0,1,0].to_i = 2[0,1,0,1].to_i = 5.

在Ruby中有哪些可行的方法?

ruby bitarray

1
推荐指数
1
解决办法
1141
查看次数

Python比特阵集

生成一组类似bitarray的对象的最佳方法是什么,以便我可以有效地测试成员资格.天真的方式似乎没有像我期望的那样起作用:

>>> from bitarray import bitarray
>>> 
>>> bitarray_set = set([bitarray('0000'), bitarray('0001')])
>>> bitarray_set
set([bitarray('0001'), bitarray('0000')])
>>> 
>>> bitarray('0000') in bitarray_set
False
Run Code Online (Sandbox Code Playgroud)

解决方法是将一组单独的字符串或其他更友好的对象保存为键.然后将bitarray转换为字符串并测试该集合的成员资格.但这似乎有点麻烦.有更好的解决方案吗?

python set bitarray

1
推荐指数
1
解决办法
432
查看次数