布尔数组从位掩码返回不正确的值?

时间:2014-06-06 12:44:49

标签: c++ arrays boolean bit-manipulation

我编写了一个函数,将一个字节解构为8位,并将这些位作为布尔值存储到布尔数组中。但是,布尔数组产生的随机值令我感到困惑,因为布尔值只能保持为TRUE和FALSE。

// DeconByte :: Deconstructs a byte into a series of bits.
bool* DeconByte( ubyte Value ) {
    bool Bools[ 8 ];

    for( int i = 0; i < 8; i ++ ) {
        Bools[ i ] = ( ( Value >> ( 7 - i ) ) & 1 ) > 0;
    }

    return Bools;
}

如果传递值255,则结果应为8个TRUE布尔值的数组作为数组。然而,奇怪的是,我的函数不仅没有返回布尔值,而且每次都返回不同的值而不改变字节输入。

究竟出了什么问题?


根据答案,我解决了问题:

// DeconByte :: Deconstructs a byte into a series of bits.
bool* DeconByte( ubyte Value ) {
    bool Bools = new bool[ 8 ];

    for( int i = 0; i < 8; i ++ ) {
        Bools[ i ] = ( ( Value >> i ) & 1 ) > 0;
    }

    return Bools;
}

// Testing:
bool* Bits = DeconByte( 255 );

1 个答案:

答案 0 :(得分:1)

返回指向局部变量的指针,在退出函数后通常会销毁该局部变量。所以程序有不确定的行为。

按以下方式定义功能

std::array<bool, 8> DeconByte( ubyte Value ) 
{
    std::array<bool, 8> Bools;

    for( int i = 0; i < 8; i ++ ) {
        Bools[ i ] = ( ( Value >> i ) & 1 ) > 0;
    }

    return Bools;
}