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