2013-02-05 55 views
1

我有一个包含0/1(布尔型数字的char数组)的字符数组(char charr [5])。现在,我想将字符数组转换为64位整数(如果数组是{0,0,0,1,0},它将给出2)。怎么做 ?有没有库函数?布尔型数字到64位整数的字符数组

+1

只需要手动执行...使用按位运算符解决这个问题并不是一个特别困难的问题。 – nneonneo

+0

如果它确实是一个小阵列,你需要这个经常我会建立一个查找表 –

回答

3

不,没有标准的功能。但是,这是很简单的:

uint64_t pack(const uint8_t *bits, size_t n) 
{ 
    uint64_t x = 0, value = 1 << (n - 1); 

    while(n > 0) 
    { 
    x += value * *bits++; 
    n--; 
    value /= 2; 
    } 
    return x; 
} 
+0

我摆脱'价值',只是使用班次,但否则它很好。 – nneonneo

0

尝试strtoll与基地2:

int val = strtoll(input, NULL, 2); 
+0

呃不,它会期望“0”和“1”,即数字,这不是输入的内容。 – unwind

+0

@unwind:但这是可以修复的。只需将“0”加入所有数字。 (如果你有'char []',则工作,如果你有'const char *',那么你需要首先创建一个拷贝) – MSalters

1

开卷有权的基本概念,而是一个复杂的实现。这也适用:

uint64_t pack(const uint8_t *bits, size_t n) 
{ 
    uint64 x = 0; 
    for(;n > 0; n--) // For all input bits. 
    { 
    x <<= 1; // make room for next bit. 
    assert(*bits <= 1); // It better be a 0 or 1. 
    x += *bits++; // Add new bit on the end. 
    } 
    return x; 
}