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

Boolean array returning incorrect values from bitmask?

本文关键字:不正确 返回 掩码 数组 布尔      更新时间:2023-10-16

我编写了一个函数,它将一个字节解构为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 );

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

按以下方式定义函数

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;
}